(本来是想学习深搜的,但是'走迷宫'的经典题,需要用到队列,所以插一下队列的学习
#include <iostream>
using namespace std;
const int N = 100010;
int q[N];
//[hh, tt] 之间为队列(左闭右闭)
int hh = 0;//队头位置
int tt = -1;//队尾位置
//Question:为什么队头在左边是0,而队尾在右边是-1呢?
//Answer:因为要初始化队列,tt>==hh时,代表队列至少有一个元素
//操作次数
int m;
//操作方式
string s;
//入队:队尾先往后移动一格,再放入要插入的数据
void push(int x){
q[++tt] = x;
}
//出队:队头往后移动一格
void pop(){
hh++;
}
//[hh, tt]表示队列区间,当tt >= hh时,区间不为空
void empty(){
if(tt >= hh) cout << "NO" << endl;
else cout << "YES" << endl;
}
//hh指向队头,q[hh]代表队头元素
void query (){
cout << q[hh] << endl;
}
int main(){
cin >> m;
while(m--){
cin >> s;
//入队
if(s == "push"){
int x;
cin >> x;
push(x);
}
//出队
if(s == "pop"){
pop();
}
//问空
if(s == "empty"){
empty();
}
//问队头
if(s == "query"){
query();
}
}
}
问题以及容易出错的地方:
1.++t与t++的区别
2.为什么输出要转行: 根据输出样例的格式
3:NO和YES是字符串,不能直接出现,要加双引号
4.string:" 字符串" ; char:'字符'
5.学习主函数种如何处理输入m次
(参考:https://www.acwing.com/solution/content/125785/