STL之 栈,队列,优先队列,两端队列,排序比较函数

push 放入元素
empty 检测是否存在元素
top (栈)/ front(队列) 查看最顶部 / 最前端元素
pop 删除元素
size 元素个数

题目描述
设计一个简单的整数栈。
栈是一种基础的数据结构。他只能在一段插入和删除。
我们可以在任意时刻往栈中放入元素,也可以在任意时刻取出栈里的元素。
每当我们把数字放入栈中(也叫入栈,压栈等),新放入的数字只能放在最后面。
每当我们取出元素时(也叫出栈,弹栈等),只能取出最后放入的元素。

请你设计一个程序,实现这样的功能。

输入格式
输入有若干行,包括三种操作:
PUSH X
向栈顶压入整数X
POP
弹出并输出栈顶的整数.如果栈为空,请输出字符串"Empty"
END
表示结束

输出格式
参照输入部分,输出应该输出的

样例输入
PUSH 1
PUSH 2
POP
POP
POP
PUSH 5
POP
POP
POP
END

样例输出
2
1
Empty
5
Empty
Empty

#include<iostream>
#include<stack>
using namespace std;
int main(){
    
    
	stack<int> stk;
	string tp;
	int tpnum,num=0; 
	while(cin>>tp){
    
    
		if(tp[1]=='N') 
			break;
		if(tp[1]=='U'){
    
    
			cin>>tpnum;
			stk.push(tpnum); 
		}		 			
		if(tp[1]=='O'){
    
     
			if(stk.empty())
				cout<<"Empty"<<endl;
			else{
    
    
				cout<<stk.top()<<endl; 
				stk.pop();
			} 				
		} 
	} 
	return 0; 
} 

队列

题目描述
设计一个简单的队列

输入格式
输入包括三种操作:
PUSH X
在队列中加入整数X
POP
弹出并输出队列前端的整数.如果队列为空,请输出字符串"Empty"
END
表示结束

输出格式
输出该输出的

样例输入
PUSH 1
PUSH 2
POP
POP
POP
PUSH 5
POP
POP
POP
END

样例输出
1
2
Empty
5
Empty
Empty

#include<iostream>
#include<queue>
using namespace std;
int main(){
    
    
	queue<int> que;
	string tp;
	int tpnum,num=0; 
	while(cin>>tp){
    
    
		if(tp[1]=='N') 
			break;
		if(tp[1]=='U'){
    
    
			cin>>tpnum;
			que.push(tpnum); 
		}		 			
		if(tp[1]=='O'){
    
     
			if(que.empty())
				cout<<"Empty"<<endl;
			else{
    
    
				cout<<que.front()<<endl; 
				que.pop();
			} 				
		} 
	} 
	return 0; 
} 

优先队列

题目描述
设计一个简单的优先队列

输入格式
输入包括三种操作:
PUSH X
在队列中加入整数X
POP
弹出并输出最大的整数.如果队列为空,请输出字符串"Empty"
END
表示结束

输出格式
输出该输出的

样例输入
PUSH 1
PUSH 2
POP
POP
POP
PUSH 5
POP
POP
POP
END

样例输出
2
1
Empty
5
Empty
Empty

#include<iostream>
#include<queue>
using namespace std;
int main(){
    
    
	priority_queue<int> que;
	string tp;
	int tpnum,num=0; 
	while(cin>>tp){
    
    
		if(tp[1]=='N') 
			break;
		if(tp[1]=='U'){
    
    
			cin>>tpnum;
			que.push(tpnum); 
		}		 			
		if(tp[1]=='O'){
    
     
			if(que.empty())
				cout<<"Empty"<<endl;
			else{
    
    
				cout<<que.top()<<endl; 
				que.pop();
			} 				
		} 
	} 
	return 0; 
} 

优先队列默认从大到小,如想从小到大:

priority_queue<int,vector<int>,greater<int> > pq; 

再补一个两端队列

#include<iostream>
#include<queue> 
#include<stack> 
using namespace std;
int main(){
    
    
	deque<int> dq;
	dq.push_front(5);
	dq.push_back(6);
	dq.size();
	if(!dq.empty()){
    
    
		cout<<dq.front()<<" "<<dq.back();
		dq.pop_front();
		dq.pop_back();
	} 
}