--- title: "队列" created: 2025-11-28 tags: - 算法 --- # 队列 ## 题目 [模拟队列](https://www.acwing.com/problem/content/831/) ![[image-4607cd64.png]] ## 思路分析 使用两个指针维护数组 hh要删除 所以以0为起点 tt表示尾 用于插入 和栈同理 以-1为起点 队尾插队头删 ## 代码实现 ```cpp #include using namespace std; const int N = 100010; int q[N]; //[hh, tt] 之间为队列(左闭右闭) int hh = 0;//队头位置 int tt = -1;//队尾位置 //操作次数 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(); } } return 0; } ``` ## 同类题型 ## 视频讲解 --- ⬅️ [[2-Learning/02-算法/02-听课板子/数据结构/栈与队列/栈|栈]] 🏠 [[00-听课板子]] ➡️ [[2-Learning/02-算法/02-听课板子/数据结构/栈与队列/单调栈|单调栈]]