zoukankan      html  css  js  c++  java
  • 队列专题

    队列专题

    前言:

    开始复习学习队列,写个学习记录总结一下知识点

    说实话,现在集训期间写的东西挺杂乱的,一会这个算法一会那个算法,害,只能不定期的记录=.=


    目录:

    每一个算法:浅谈知识点+例题讲解+题目

    • 队列queue
    • 优先队列priority_queue
    • 双端队列和单调队列

    队列queue:

    1、简介:STL中“先进先出”的队列容器
    2、运用:

    (1)定义: queue< typename > name;

    (2)访问:受“先进先出”的限制,只能通过front()和back()来访问元素

    注意:在进行访问操作时,一定要先判空,否则会因为队空而出现错误

    (3)操作:

    ①入队/出队:push()/pop()

    ②判空:empty()

    ③长度:size()

    (4)常见用途:在实现广搜时,用queue来代替自己手写的队列,能够提高代码的准确性

    3、题目:

    (1)洛谷P1443 马的遍历

    (2)所有广搜的题目(偷个懒就不多列举了,相信queue也不需要例题讲解quq)


    优先队列priority_queue:

    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)

    • 题目:

    (1)滑动窗口/【模板】 单调队列

    (2)洛谷P1714 切蛋糕

    (3)洛谷P2629 好消息,坏消息

    (4)洛谷P2422 良好的感觉


  • 相关阅读:
    oracle 自动备份,删除历史
    oracle 系统语法
    myeclipse快捷键
    ANT教程
    新手 Spring 疑惑
    MyEclipse8.5整合Git (转)
    eclipse build path功能总结
    Apache Maven 入门篇(下)
    Mac OS下配置PHP Nginx PHP-FPM
    Python删除列表中元素
  • 原文地址:https://www.cnblogs.com/Eleven-Qian-Shan/p/13084348.html
Copyright © 2011-2022 走看看