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

一、stack栈

  栈的规则就是先进后出FILO(First In Last Out),即先入栈的元素最后一个出栈,比如子弹的弹夹,先压到底的子弹最后打出。

#include
#include
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
#include
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
#include
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
#include
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
#include
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

你可能感兴趣的:(算法竞赛,数据结构,蓝桥杯,c++)