Acwing 829. 模拟队列
题目描述
实现一个队列,队列初始为空,支持四种操作:
- push x – 向队尾插入一个数 x ;
- pop – 从队头弹出一个数;
- empty – 判断队列是否为空;
- query – 查询队头元素。
现在要对队列进行 M
个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。
输入格式
第一行包含整数 M,表示操作次数。
接下来 M
行,每行包含一个操作命令,操作命令为 push x,pop,empty,query 中的一种。
输出格式
对于每个 empty 和 query 操作都要输出一个查询结果,每个结果占一行。
其中,empty 操作的查询结果为 YES 或 NO,query 操作的查询结果为一个整数,表示队头元素的值
数据范围
1≤M≤100000,
1≤x≤109
思路
队列即先进先出,就像排队,当一个元素入队时,就是,将队列的队尾加一,出队就是对头加一。
代码
#include<iostream>
#include<algorithm>
#include<string>
using namespace std ;
const int N = 100010;
int n ;
int que [N],hh = 0 , tt = -1;
void push(int x)
{
que[tt++] = x;
}
void pop()
{
que[hh++];
}
int top()
{
return que[hh-1];
}
bool empty()
{
return hh > tt ;
}
int main()
{
cin>>n;
while(n--)
{
int x;
string str;
cin>>str;
if(str == "push")
{ scanf("%d",&x); push(x);}
else if(str == "empty")
{
if(empty()) printf("YES\n");
else printf("NO\n");
}
else if(str == "query")
{
cout<<top()<<endl;
}else {
pop();
}
}
return 0;
}
}else {
pop();
}
}
return 0;
}