题目描述
实现一个队列,队列初始为空,支持四种操作:
push x – 向队尾插入一个数 x;
pop – 从队头弹出一个数;
empty – 判断队列是否为空;
query – 查询队头元素。
现在要对队列进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。
样例
输入样例:
10
push 6
empty
query
pop
empty
push 3
push 4
pop
query
push 6
输出样例:
NO
6
YES
4
法一:纯数组模拟队列
C++ 代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int val[N]; // 保存队列中所有元素的值
int head = 1, tail = 0; // 维护队列的队头和队尾在哪里
void print(int val[]) { // 打印队列(调试的时候用到的)
cout << "val: ";
for (int i = head; i <= tail; i++) {
cout << val[i] << " ";
}
cout << endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int m;
cin >> m;
for (int i = 1; i <= m; i++) {
string op;
cin >> op;
if (op == "push") {
int x;
cin >> x;
val[++tail] = x; // 在队尾压入元素x
// print(val);
} else if (op == "pop") {
head++; // 将队头元素出队
// print(val);
} else if (op == "empty") {
if (head > tail) { // 判断队列是否为空
cout << "YES" << endl; // 队列为空
} else {
cout << "NO" << endl; // 队列非空
}
} else {
cout << val[head] << endl; // 打印队头元素
}
}
exit(0);
}
法二:利用c++库里的容器queue
C++ 代码
#include <bits/stdc++.h>
using namespace std;
queue<int> q;
void print(queue<int> q) { // 打印队列q(调试的时候用到的)
cout << "q: ";
while (!q.empty()) {
cout << q.front() << " ";
q.pop();
}
cout << endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int m;
cin >> m;
for (int i = 1; i <= m; i++) {
string op;
cin >> op;
if (op == "push") {
int x;
cin >> x;
q.push(x); // 往队列q中压入元素x
// print(q);
} elseif (op == "pop") {
q.pop(); // 使队列q中的队头出队
// print(q);
} elseif (op == "empty") {
if (q.empty()) { // 判断队列q是否为空
cout << "YES" << endl; // 队列q为空
} else {
cout << "NO" << endl; // 队列q非空
}
} else {
cout << q.front() << endl; // 打印队列q的队头元素
}
}
exit(0);
}