数组与线性结构

队列

队列就是商店里排的队:人们从队尾加入,从队头被服务,按到达的先后顺序进行。最先进去的最先出来——这是 FIFO,先进先出,与栈正好相反。两个核心动作是 enqueue(加到队尾)和 dequeue(从队头移除);front 让你看一眼下一个是谁。

实现得当时,两端都是 O(1)。在普通数组上的朴素做法会在出队时把所有元素整体前移(O(n));常见的修正是用环形缓冲区,让队头和队尾下标在数组里循环绕回,于是哪一端都不必挪动。双向链表同样能在两端做到 O(1)。在 C++ 里你会用 std::queue,它底层包着一个 deque。

队列刻画的是公平与顺序。它驱动任务与打印调度、消息管道,以及在快生产者与慢消费者之间的缓冲;而最关键的是广度优先搜索,它用一个队列逐层访问图。

#include <queue>
std::queue<int> q;
q.push(1); q.push(2); q.push(3);
//  front [ 1 | 2 | 3 ] back
int f = q.front();  // 1   (peek, O(1))
q.pop();            // removes 1 from the front, O(1)
// now front() == 2

FIFO 顺序;入队与出队都是 O(1)。

栈是 LIFO、队列是 FIFO——记住这一对,就掌握了一半「何时用谁」的判断。

又称
FIFOFIFO queue队列佇列先進先出