模拟队列
主要思想:先进先出(注意与栈做区分),队尾插入,队头删除。设置一个数组存储数据,队头指针指向队列第一个元素(初始为0),队尾指针指向最后一个元素(初始为-1)
板子:
//hh表示队头,tt表示队尾
int q[N] ,hh=0,tt=-1;
//在队尾插入元素,在队头插入元素
q[++tt] = x;
hh++;
q[hh]//队头元素
if(hh < tt) not empty;
else empty;
Acwing 829 模拟队列
实现一个队列,队列初始为空,支持四种操作:
1.push x – 向队尾插入一个数 x;
2.pop – 从队头弹出一个数;
3.empty – 判断队列是否为空;
4.query – 查询队头元素。
现在要对队列进行 M个操作,其中的每个操作 3和操作 4 都要输出相应的结果。
输入样例:
10
push 6
empty
query
pop
empty
push 3
push 4
pop
query
push 6
输出样例:
NO
6
YES
4
具体实现代码:
#include <iostream>
using namespace std;
const int N=100010;
//hh表示队头,tt表示队尾
int q[N] ,hh=0,tt=-1;
//在队尾插入元素,在队头插入元素
//q[++tt] = x;
//hh++;
//q[hh]//队头元素
//if(hh < tt) not empty;
//else empty;
int main(){
int m;
cin >> m;
while(m--){
string s;
cin >> s;
if(s == "push"){
int x;
cin >> x;
q[++tt] = x;
}
if(s == "pop"){
hh ++;
}
if(s=="empty"){
cout << (hh <= tt ? "NO" : "YES") << endl;
}
if(s=="query"){
cout << q[hh] << endl;
}
}
return 0;
}
这就是普通的队列,后面还有循环队列与单调队列。(待补充)