蓝桥杯必会数据结构-栈队列与优先队列
Posted As_zyh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯必会数据结构-栈队列与优先队列相关的知识,希望对你有一定的参考价值。
一、stack栈
栈的规则就是先进后出FILO(First In Last Out),即先入栈的元素最后一个出栈,比如子弹的弹夹,先压到底的子弹最后打出。
#include<iostream>
#include<stack>
using namespace std;
int main()
stack<int> s;
//使用push()向栈中压入元素
for(int i = 0; i < 5; i++)
s.push(i);
while(!s.empty())
//使用top()访问栈顶元素
cout << s.top() << " ";
//使用pop()移除栈顶元素
s.pop();
cout << endl;
return 0;
运行结果
4 3 2 1 0
二、queue队列
队列的规则是先入先出FIFO(First In First out),即先入队列的元素先出队列,现实中的例子很常见。
#include<iostream>
#include<queue>
using namespace std;
int main()
queue<int> q;
//使用push()向队尾添加元素
for(int i = 0; i < 5; i++)
q.push(i);
//empty()返回是否为空
while(!q.empty())
//size()返回队列大小,front()返回队头元素,back()返回队尾元素
cout << "队列大小:" << q.size() << endl;
cout << "队头元素:" << q.front() << " 队尾元素:" << q.back() << "\\n\\n";
//pop()删除队头元素
q.pop();
return 0;
运行结果
队列大小:5
队头元素:0 队尾元素:4
队列大小:4
队头元素:1 队尾元素:4
队列大小:3
队头元素:2 队尾元素:4
队列大小:2
队头元素:3 队尾元素:4
队列大小:1
队头元素:4 队尾元素:4
三、priority_queue优先队列
优先队列的规则是,最“优先”的元素先出,即优先级最高的元素会先出priority_queue,需要定义比较优先级的类或结构体。
先看第一种,越小的整数优先级越低的优先队列
#include<iostream>
#include<queue>
using namespace std;
int main()
//定义一个越小的整数优先级越低的优先队列
priority_queue<int> pq;
for(int i = 0; i < 5; i++)
pq.push(i); //push()向优先队列加入元素
//判断是否为空
while(!pq.empty())
cout << "优先队列的大小:" << pq.size() << endl;
cout << "优先级最高的元素:" << pq.top() << "\\n\\n";
pq.pop(); //删除优先级最高的元素
return 0;
运行结果
优先队列的大小:5
优先级最高的元素:4
优先队列的大小:4
优先级最高的元素:3
优先队列的大小:3
优先级最高的元素:2
优先队列的大小:2
优先级最高的元素:1
优先队列的大小:1
优先级最高的元素:0
下面看第二种,越大的整数优先级越低的优先队列
#include<iostream>
#include<queue>
using namespace std;
int main()
//定义一个越大的整数优先级越低的优先队列
priority_queue<int, vector<int>, greater<int> > pq; //最后两个>之间有空格
for(int i = 0; i < 5; i++)
pq.push(i); //push()向优先队列加入元素
//判断是否为空
while(!pq.empty())
cout << "优先队列的大小:" << pq.size() << endl;
cout << "优先级最高的元素:" << pq.top() << "\\n\\n";
pq.pop(); //删除优先级最高的元素
return 0;
运行结果
优先队列的大小:5
优先级最高的元素:0
优先队列的大小:4
优先级最高的元素:1
优先队列的大小:3
优先级最高的元素:2
优先队列的大小:2
优先级最高的元素:3
优先队列的大小:1
优先级最高的元素:4
第三种,自定义优先级,前面两种学会就可以了,这种先过个眼熟。
#include<iostream>
#include<queue>
using namespace std;
struct cmp
//重载()运算符,返回true代表优先级更小,可以想象成“小于运算符”
bool operator() (const int a, const int b) const
return a%10 > b%10;
;
int main()
//个位数越大优先级越低的整数优先队列
priority_queue<int, vector<int>, cmp> pq;
for(int i = 0; i < 5; i++)
pq.push(i); //push()向优先队列加入元素
//判断是否为空
while(!pq.empty())
cout << "优先队列的大小:" << pq.size() << endl;
cout << "优先级最高的元素:" << pq.top() << "\\n\\n";
pq.pop(); //删除优先级最高的元素
return 0;
运行结果
优先队列的大小:5
优先级最高的元素:0
优先队列的大小:4
优先级最高的元素:1
优先队列的大小:3
优先级最高的元素:2
优先队列的大小:2
优先级最高的元素:3
优先队列的大小:1
优先级最高的元素:4
以上是关于蓝桥杯必会数据结构-栈队列与优先队列的主要内容,如果未能解决你的问题,请参考以下文章