蓝桥杯必会数据结构-栈队列与优先队列

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

以上是关于蓝桥杯必会数据结构-栈队列与优先队列的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯必会数据结构-栈队列与优先队列

Java.数据结构.集合体系详解

数据结构与算法-栈和队列

lunix下的redis数据库操作——list列表

数据存储的常用结构 堆栈队列数组链表

java--常用数据结构