题目描述
实现一个队列,队列初始为空,支持四种操作:
- push x – 向队尾插入一个数 xx;
- pop – 从队头弹出一个数;
- empty – 判断队列是否为空;
- query – 查询队头元素。
现在要对队列进行 MM 个操作,其中的每个操作 33 和操作 44 都要输出相应的结果。
直接用STL的queue也行
数据范围
1≤M≤1000001≤M≤100000,
1≤x≤1091≤x≤109,
所有操作保证合法。
输入描述
第一行包含整数 MM,表示操作次数。
接下来 MM 行,每行包含一个操作命令,操作命令为 push x,pop,empty,query 中的一种。
输出描述
对于每个 empty 和 query 操作都要输出一个查询结果,每个结果占一行。
其中,empty 操作的查询结果为 YES 或 NO,query 操作的查询结果为一个整数,表示队头元素的值。
样例输入
10 push 6 empty query pop empty push 3 push 4 pop query push 6
样例输出
NO 6 YES 4
分析:通过对tail赋值为0,对head赋值为1,把head和tail飞别作为数组的初始元素和末尾元素,再把head和tail作比较,可清晰地知道队头是哪个元素,队列是否为空,当新元素加入时tail++,把新元素存入数组中,当要弹出收个元素时,head++,数组抛弃第一个元素。
#include<iostream>
using namespace std;
int main()
{
int M;
cin>>M;
string str;
int x;
int arr[100];
int tail=0,head=1;
while(M--){
cin>>str;
if(str=="push"){
cin>>x;
arr[++tail]=x;
}
if(str=="pop"){
if(tail>=head)
head++;
}
if(str=="empty"){
if(tail>=head){
cout<<"NO\n";
}
else{
cout<<"YES\n";
}
}
if(str=="query"){
cout<<arr[head]<<"\n";
}
}
return 0;
}