算法基础课题解合集
队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
队列的实现
用 $hh$ 和 $tt$ 分别保存队头和队尾,插入操作只需要将 $x$ 存到 $tt + 1$ 上,然后更新 $tt$,删除操作更简单,仅需要 $hh++$ 即可。
代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100010;
int hh, tt = -1, q[N];
int m, x;
string op;
int main() {
scanf("%d", &m);
while (m --) {
cin >> op;
if (op == "push") {
scanf("%d", &x);
q[++ tt] = x;
} else if (op == "pop") {
hh ++;
} else if (op == "query") {
// 打印队头
printf("%d\n", q[hh]);
} else {
// 如果 hh 和 tt 之间没有东西(即 hh > tt)的话,就为空。
if (hh > tt) puts("YES");
else puts("NO");
}
}
return 0;
}
好啦,这篇题解到这里就结束啦!感谢观看!!!
$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\mathcal{writer\enspace by \enspace acwing}$ : $\mathfrak{天元之弈}$