欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

单向队列,双向队列,优先队列的基本用法

程序员文章站 2022-07-14 12:22:13
...

1.单向队列,意思就是只能从队列后面加入元素,遵循先进先出原则;

#include <queue>
#include <iostream>
using namespace std;
int main()
{
    queue<int>q;
    q.push(5)//在队列末尾插入一个元素5;
    q.pop()//删除队列的第一个元素;
    q.front()//返回队列的第一个元素;
    q.empty()//判断队列是否为空,如果为空返回true;
    q.size()//返回队列中有多少元素;
    //遍历队列中元素可以为:
    while(!q.empty())
    {
        cout << q.front() << endl;
        q.pop();
    }
    return 0;
}

2.双向队列,意思是既可以从队尾插入元素,也可以从队列前插入元素

#include <deque>
#include <iostream>
using namespace std;
int main()
{
    deque<int>q;
    deque<int>::iterator it1//正向迭代器
    deque<int>::reverse_iterator it2;//反向迭代器
    q.push_back()//在队尾插入元素;
    q.push_front()//在队列前插入元素;
    q.pop_back()//删除队尾元素;
    q.pop_front()//删除队列前元素;
    q.size()//返回队列q里面有多少元素;
    q.empty()//检查队列q是否为空;
    q.clear()//情况队列所有元素
    q.erase(start,end)//删除这俩个迭代器所指向的区间
    q.insert(i,x)//把x插入到迭代器i所指向的位置;
    正向遍历
    for(it1 = q.begin();it1 != q.end();it1++)
        cout << *it1 << endl;
    反向遍历
    for(it2 = q.rbegin();it2 != q.rend();it2++)
        cout << *it2 << endl;
    不借助迭代器遍历
    while(!q.empty())
    {
        cout << q.front() << endl;
        q.pop_front();
    }
    return 0;
}

3.优先队列,就是这个队列是默认从大到小排序,如果要从小到大排序,需要借助其他函数;

 #include <queue>
#include <iostream>
using namespace std;
int main()
{
    priority_queue<int>q;//默认从大到小排序
    priority_queue<int, vector <int> ,greater <int> >q;//从小到大排序
    q.push()//插入元素;
    q.pop()//删除元素;
    q.size()//队列q的元素个数
    while(!q.empty())//遍历
    {
        cout << q.top() << endl;
        q.pop();
    }
}