軟體工程師職涯升級計畫啟動!立即預約職涯諮詢、履歷健檢或模擬面試👈,為您的加薪做好準備!
在資料結構中,除了後進先出的 Stack,另一個常見且實用的就是 Queue(佇列)。它是許多系統背後默默運作的重要機制,例如排程器、印表機佇列、網路封包、事件處理機制等。
這篇筆記將帶你從零理解 Queue 的本質、操作方式與應用場景,搭配 JavaScript 實作與 LeetCode 題目。
一、Queue 佇列是什麼?

就像排隊買飲料一樣:
誰先來,就先被服務;新加入的排在最後面。
二、Queue 的結構與特性
✅ 結構說明
Queue 主要由兩個端點控制:
- Front:讀取/移除資料的位置
- Rear:插入新資料的位置
js
複製編輯class Queue {
constructor() {
this.items = [];
}
}
✅ 常見操作與時間複雜度

💡 若想讓 Dequeue()
成為 O(1),可考慮使用 雙指標法 或 雙端佇列(Deque)。
三、JavaScript Queue 實作
js
複製編輯class Queue {
constructor() {
this.items = [];
}
enqueue(value) {
this.items.push(value); // 加入尾端
}
dequeue() {
return this.items.shift(); // 移除前端(時間複雜度 O(n))
}
front() {
return this.items[0];
}
isEmpty() {
return this.items.length === 0;
}
getSize() {
return this.items.length;
}
print() {
console.log(this.items);
}
}
// ✅ 測試
const q = new Queue();
q.enqueue(10);
q.enqueue(20);
q.enqueue(30);
q.dequeue(); // 移除 10
console.log(q.front()); // 20
console.log(q.getSize()); // 2
console.log(q.isEmpty()); // false
q.print(); // [20, 30]
四、Queue 的應用場景
Queue 常被用於處理需要「按順序處理」的任務,像是:
📦 排程系統(Task Queue)
🖨️ 印表機緩衝區
🌐 網路封包傳送順序
🧭 廣度優先搜尋(BFS)
📥 作業系統中的排程演算法
🕹️ 遊戲回合制邏輯或事件觸發順序
五、LeetCode 題目範例:Perfect Binary Tree 的 BFS
題目連結:
Populating Next Right Pointers in Each Node - LeetCode
題目描述:
給定一個完美二元樹,將每個節點的 next
指標連結到右側節點(同一層)。
📌 解法思路:使用 Queue + BFS
js
複製編輯var connect = function(root) {
if (!root) return null;
let queue = [root];
while (queue.length > 0) {
let len = queue.length;
for (let i = 0; i < len; i++) {
let node = queue.shift(); // Queue → FIFO
if (i < len - 1) {
node.next = queue[0]; // 指向同層下一個節點
}
if (node.left) queue.push(node.left);
if (node.right) queue.push(node.right);
}
}
return root;
};
🎯 此題就是 Queue(FIFO)應用的代表,適合練習 BFS。
六、延伸學習與資源推薦
📖 《Algorithm Visualized》– 圖像化資料結構與演算法介紹
小結
Queue 雖然簡單,但幾乎每個大型系統的背後都藏著它的影子。從處理流程到資料傳遞、從圖的遍歷到任務排程,Queue 幫我們維持秩序與穩定。
下次當你在設計流程或遇到「依序處理」的題目時,別忘了試著從 Queue 的角度思考解法。