数据结构——队列

本文最后更新于:8 个月前

FIFO,先进先出

数据结构——队列

语法:template<class T, class Container = deque<T> > class queue

特性:FIFO,先进先出,队尾插入、队头删除

引用:include<queue>

函数

empty 如果队列为空,则该函数返回true,否则返回false
size 返回队列中元素的个数
push 在末尾插入一个新元素,返回值为void
pop 删除第一个元素,返回值为void
front 返回第一个元素
back 返回最后一个元素

leetcode题库

题目 题解
225.用队列实现栈 双队列,push时不断交换,让栈顶始终在队头
232.用栈实现队列 双栈,push时不断倒换,让队头始终在栈顶
341.扁平化嵌套列表迭代器 深度优先遍历 + 队列的应用 + 现学接口如何使用
387.第一个唯一字符 两次遍历字符串,用map或者int数组保存字符出现次数,简单题
239.滑动窗口最大值 双向队列deque,保存数组指针(而非数组值),队头到队尾单调递减。空间换时间,困难题
拓展:滑动窗口平均值

双向队列,deque

引用:include<deque>

函数

push_back 插入队尾
push_front 插入队头
pop_back 从队尾删除
pop_front 从队头删除
front 返回队头元素
back 返回队尾元素
insert insert (iterator position, const value_type& val),指定位置插入值
void insert (iterator position, size_type n, const value_type& val),指定位置插入值,重复插入n个
void insert (iterator position, InputIterator first, InputIterator last),指定位置插入另外一个容器的值列表
erase 两种参数,
erase (iterator position);
erase (iterator first, iterator last);
size

优先队列,priority_queue

引用:include<queue>

特性:优先队列类似于堆,其中优先级最高的元素会被最先pop()弹出,或者用top()访问优先级最高的元素。

语法:priority_queue<Type, Container, Functional>

  • 其中type为数据类型,Container为容器类型,Functional是比较方式

  • 示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    //升序队列
    priority_queue <int,vector<int>,greater<int> > q;
    //降序队列
    priority_queue <int,vector<int>,less<int> >q;
    //greater和less是std实现的两个仿函数(就是使一个类的使用看上去像一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了)

    //对于基础类型 默认是大顶堆
    priority_queue<int> a;
    //等同于 priority_queue<int, vector<int>, less<int> > a;

    //结构体自定义排序方法
    struct tmp1 //运算符重载<
    {
    int x;
    tmp1(int a) {x = a;}
    bool operator<(const tmp1& a) const
    {
    return x < a.x; //大顶堆
    }
    };
    priority_queue<tmp1> pq;

    //在结构体外重载结构体指针比较方法。优先队列的元素为结构体指针,而不是结构体(特殊),最小顶堆
    struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
    };
    struct cmp{
    bool operator()(ListNode* a,ListNode* b){
    return a->val>b->val;
    }
    };
    priority_queue<ListNode*, vector<ListNode*>, cmp> Q;

函数

push() 它将新元素插入优先队列。
pop() 它将优先级最高的元素从队列中删除。
top() 此函数用于寻址优先队列的最顶层元素。
swap() 它将优先队列的元素与具有相同类型和大小的另一个队列交换。
size() 返回优先队列的大小。
empty() 它验证队列是否为空。基于验证,它返回队列的状态。
emplace() 它在优先队列的顶部插入一个新元素。

数据结构——队列
http://timegogo.top/2022/04/09/算法与数据结构/数据结构——队列/
作者
丘智聪
发布于
2022年4月9日
更新于
2023年7月16日
许可协议