题目描述
用数组模拟队列的插入,弹出,判断队列是否为空,查询队头元素
模板
// hh 表示队头,tt表示队尾
int q[N], hh = 0, tt = -1;
// 向队尾插入一个数
q[ ++ tt] = x;
// 从队头弹出一个数
hh ++ ;
// 队头的值
q[hh];
// 判断队列是否为空
if (hh <= tt)
{
}
C++ 代码
#include <iostream>
#include "string"
using namespace std;
const int N = 2e6 + 10; // 因为队列最长不超过1e6个元素
int q[N], head = N/2, tail = N/2; //初始化队列,head, tail并不是0
//我的tail左head右,模板tail右head左,不一样
int main() {
int M;
cin >> M;
for (int i = 0; i < M; i++) {
string cmd;
cin >> cmd;
if (cmd == "push") { // 向队尾插入一个数x
int x;
cin >> x;
q[tail--] = x;
}
else if (cmd == "pop") { // 从队头弹出一个数,但不用输出
head--;
}
else if (cmd == "empty") { // 判断队列是否为空
if (head - tail <= 0) {
cout << "YES" << endl;
}
else {
cout << "NO" << endl;
}
}
else if (cmd == "query") { //查询队头元素
if (head - tail > 0) {
cout << q[head] << endl;
}
else {
cout << "empty queue, no element can be queryed" << endl;
exit(1);
}
}
else {
cout << "illegal command" << endl;
exit(1);
}
}
}