数组与线性结构
队列
队列就是商店里排的队:人们从队尾加入,从队头被服务,按到达的先后顺序进行。最先进去的最先出来——这是 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——记住这一对,就掌握了一半「何时用谁」的判断。
又称
另见