B3616 【模板】队列
B3616 【模板】队列 解题思路与代码注释
解题思路
队列是一种先进先出(FIFO)的数据结构,本题要求实现队列的四个基本操作:
-
push(x)- 将元素x加入队列尾部 -
pop()- 移除队列头部元素 -
query()- 查询队列头部元素 -
size()- 查询队列当前元素数量
有两种常见的实现方式:
-
数组模拟队列:使用数组和头尾指针(head/tail)手动管理队列
-
STL队列:直接使用C++标准库中的queue容器
代码1注释:数组模拟队列
#include<bits/stdc++.h> using namespace std; int q[10001],head = 1,tail = 1; // 定义队列数组和头尾指针(初始都指向1) int main() { int n; cin >> n; // 读取操作次数 while(n--) { int op; cin >> op; // 读取操作类型 if(op == 1) // 入队操作 { int x; cin >> x; // 读取要入队的元素 q[tail++] = x; // 将x放入tail位置,然后tail后移 } if(op == 2) // 队首出队 { if(head == tail){ // 队列为空(head等于tail) cout << "ERR_CANNOT_POP" << endl; } else{ // 队列不为空,头指针后移实现出队 head++; } } if(op == 3) // 查询队首 { if(head == tail){ // 队列为空 cout << "ERR_CANNOT_QUERY" << endl; } else{ // 输出头指针位置的元素 cout << q[head] << endl; } } if(op == 4) // 输出队列元素个数 { cout << tail - head << endl; // 尾指针-头指针=元素个数 } } return 0; }
代码2注释:STL队列实现
#include<bits/stdc++.h> using namespace std; queue<int> q; // 直接使用STL的queue容器 int main() { int n; cin >> n; // 读取操作次数 while(n--) { int op; cin >> op; // 读取操作类型 if(op == 1){ // 入队操作 int x; cin >> x; // 读取要入队的元素 q.push(x); // 使用queue的push方法 } if(op == 2){ // 出队操作 if(q.size()) q.pop(); // 队列不为空则弹出队首 else cout << "ERR_CANNOT_POP" << endl; // 空队列报错 } if(op == 3){ // 查询队首 if(q.size()) cout << q.front() << endl; // 使用front()获取队首 else cout << "ERR_CANNOT_QUERY" << endl; // 空队列报错 } if(op == 4){ // 查询队列大小 cout << q.size() << endl; // 使用size()方法 } } return 0; }
两种实现方式的比较
-
数组模拟队列:
-
优点:实现原理清晰,有助于理解队列底层工作原理
-
缺点:需要手动管理头尾指针,固定数组大小可能限制容量
-
-
STL队列:
-
优点:使用简单,无需关心底层实现,自动扩容
-
缺点:隐藏了实现细节,不利于初学者理解队列原理
-
两种实现都能正确完成题目要求,STL版本代码更简洁,而数组版本更适合学习队列的实现原理。

浙公网安备 33010602011771号