
队列的概念
队列是一种访问受限的线性表,只允许在表的一端进行插入操作,在另一端进行删除操作。允许插入的一端称为队尾,允许删除的一端称为队头。先进入队列的元素会先出队,因此队列具有先进先出 (FIFO) 的特性。
队列的模拟实现
基础定义
使用一个足够大的数组充当队列容器,配合两个指针变量来维护状态:
h:标记队头元素的前一个位置(左开右闭区间[h, t]);t:标记队尾元素的位置。
这种设定方式比较灵活,只要逻辑闭环不出错,具体下标从 0 还是 1 开始均可。这里为了代码书写习惯,我们采用从 1 开始存储有效元素的方案。
const int N = 1e6 + 10;
int h, t; // 队头指针,队尾指针
int q[N]; // 队列数组
入队操作
将新元素放入队尾,时间复杂度为 O(1)。
// 入队
void push(int x) {
q[++t] = x;
}
出队操作
移除队头元素,只需移动队头指针,时间复杂度为 O(1)。
// 出队
void pop() {
h++;
}
获取队头与队尾
注意队头元素位于 h 的下一个位置,而队尾元素就在 t 处。
// 队头元素
int front() {
return q[h + 1];
}
// 队尾元素
int {
q[t];
}




