[AcWing] 829. 模拟队列
2023-09-11 14:18:49 时间
算法标签 队列
题目简叙
思路
后进先出的原则
我们用 st,ed两个变量表示队列的对头和队尾
push
queue[++ed]=tmpn;
插入时,队尾开始移动并添加数据
pop
start++;
弹出队头数据时,我们用指针略过当前数据表示弹出
于是队头++,这样我们就不会扫描到队头元素,相当于弹出
empty
cout<<queue[start]<<endl;
直接查询队头元素
query
cout<<(start>ed?"YES":"NO")<<endl;
如果队头指针超过队尾指针,表明没有任何数据
值得注意的是队列初始化的时候,队尾元素下标应该是-1,
这样第一次插入下标就会变为0
第一次弹出也可以正常显示1>0,队伍变为没有元素
第一次返回队头元素也可以直接用下标0返回
如果是空值,就直接能用(初始化队头的)0>(初始对尾的)-1返回
代码
数组模拟
#include<iostream>
#include<string>
using namespace std;
const int N = 100000 +10;
int queue[N];
int start,ed=-1;
int main(){
int n;
cin>>n;
string op;
int tmpn;
while(n--){
cin>>op;
if(op=="push"){
cin>>tmpn;
queue[++ed]=tmpn;
}
else if(op=="pop"){
start++;
}
else if(op=="query"){
cout<<queue[start]<<endl;
}
else if(op=="empty"){
cout<<(start>ed?"YES":"NO")<<endl;
}
}
return 0;
}
STL
#include<iostream>
#include<string>
#include<queue>
using namespace std;
const int N = 100000 +10;
queue<int>q;
int main(){
int n;
cin>>n;
string op;
int tmpn;
while(n--){在这里插入代码片
cin>>op;
if(op=="push"){
cin>>tmpn;
q.push(tmpn);
}
else if(op=="pop"){
q.pop();
}
else if(op=="query"){
cout<<q.front()<<endl;
}
else if(op=="empty"){
cout<<(q.empty()?"YES":"NO")<<endl;
}
}
return 0;
}
相关文章
- 【BZOJ5322】[JXOI2018]排序问题(模拟)
- Go 数组模拟环形队列
- Go 数组模拟单项队列
- 在 MySQL 中模拟外部联接 (LEFT、RIGHT、INNER JOIN、OUTER JOIN)
- 1061 Dating (20 分)【难度: 一般 / 知识点: 模拟】
- 2/9 康托展开+单调队列+单调栈(模拟栈)
- 【Push Kit】模拟服务端发送消息至客户端,测试消息发送功能(华为推送服务)
- HDU 6777 Covid (简单模拟)
- Qt编写的项目作品34-雷达模拟仿真工具(雨田哥作品)
- JavaScript_js模拟键盘输入
- Python实例---模拟微信网页登录(day1)
- hdu5319 Painter(模拟)
- [模拟] hdu 4452 Running Rabbits
- USACO-Section1.1 Your Ride Is Here [模拟]