陣列與線性結構
佇列
佇列就是商店裡排的隊:人們從隊尾加入,從隊首被服務,按到達的先後順序進行。最先進去的最先出來——這是 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——記住這一對,就掌握了一半「何時用誰」的判斷。
又稱
另見