开始复习学习队列,写个学习记录总结一下知识点
说实话,现在集训期间写的东西挺杂乱的,一会这个算法一会那个算法,害,只能不定期的记录=.=
每一个算法:浅谈知识点+例题讲解+题目
1、简介:STL中“先进先出”的队列容器
2、运用:
(1)定义: queue< typename > name;
(2)访问:受“先进先出”的限制,只能通过front()和back()来访问元素
注意:在进行访问操作时,一定要先判空,否则会因为队空而出现错误
(3)操作:
①入队/出队:push()/pop()
②判空:empty()
③长度:size()
(4)常见用途:在实现广搜时,用queue来代替自己手写的队列,能够提高代码的准确性
3、题目:
(1)洛谷P1443 马的遍历
(2)所有广搜的题目(偷个懒就不多列举了,相信queue也不需要例题讲解quq)
1、简介:使用堆实现的默认将当前队列优先级最高的一个置于队首
2、运用:
(1)priority_queue < typename > name;
(2)访问:和队列不一样,优先队列没有front()和back(),只能通过top()来访问队首元素,也就是优先级最高的元素
(3)操作:
①入队/出队:push()和pop()
②判空:empty()
③长度:size()
(4)优先级设置:
① priority_queue <typename, vector< typename >, less< typename> > name;
② priority_queue <typename, vector< typename >, greater< typename> > name;
理解:
①第二个参数vector< typename >填写的是来承载底层数据结构堆(heap)的容器,其中的typename与第一个参数的typename一致
②第三个参数less< int >表示数字大的优先级越大,而greater< int >表示数字小的优先级越大(能够将最小的元素放在队首)
3、例题讲解:
任务调度
(见我的另一篇题解,简直是无良骗取访问量啊)
4、题目:
(1)Codeup 任务调度
(2)洛谷P3611 [USACO17JAN]Cow Dance Show S
STL中的deque是双端队列,用法如下:
(1)dq[i]:返回队列中下标为i的元素
(2)dq.front():返回队头
(3)dq.back():返回队尾
(4)dq.pop_back():删除队尾。不返回值
(5)dq.pop_front():删除队头。不返回值
(6)dq.push_back():在队尾添加一个元素
(7)dq.push_front(e):在队头添加一个元素
(1)队列中的元素是单调有序的,且元素在队列中的顺序和原来在序列中的顺序一致(期望)
(2)单调队列的队头和队尾都能入队和出队(实现手段)
单调队列的好处:
用起来非常灵活,在很多问题中应用它可以获得优化——用单调队列处理时,每个元素只需要进出队列一次,复杂度是 O(n)。
滑动窗口/【模板】 单调队列
(再一次见我的另一篇题解qwq)
(2)洛谷P1714 切蛋糕
原文:https://www.cnblogs.com/Eleven-Qian-Shan/p/13084348.html