資料結構筆記:Queue 佇列的特性與實作

更新 發佈閱讀 6 分鐘

軟體工程師職涯升級計畫啟動!立即預約職涯諮詢、履歷健檢或模擬面試👈,為您的加薪做好準備!

在資料結構中,除了後進先出的 Stack,另一個常見且實用的就是 Queue(佇列)。它是許多系統背後默默運作的重要機制,例如排程器、印表機佇列、網路封包、事件處理機制等。

這篇筆記將帶你從零理解 Queue 的本質、操作方式與應用場景,搭配 JavaScript 實作與 LeetCode 題目。


一、Queue 佇列是什麼?

raw-image

Queue 是一種 先進先出(FIFO, First In First Out) 的資料結構。

就像排隊買飲料一樣:

誰先來,就先被服務;新加入的排在最後面。


二、Queue 的結構與特性

結構說明

Queue 主要由兩個端點控制:

  • Front:讀取/移除資料的位置
  • Rear:插入新資料的位置
js
複製編輯class Queue {
constructor() {
this.items = [];
}
}

常見操作與時間複雜度

raw-image

💡 若想讓 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。


六、延伸學習與資源推薦

📚 Chiu's Blog:Queue 實作與說明

📚 Visualgo – Queue 視覺化工具

💻 LeetCode Queue 題目整理

📖 《Algorithm Visualized》– 圖像化資料結構與演算法介紹


小結

Queue 雖然簡單,但幾乎每個大型系統的背後都藏著它的影子。從處理流程到資料傳遞、從圖的遍歷到任務排程,Queue 幫我們維持秩序與穩定。

下次當你在設計流程或遇到「依序處理」的題目時,別忘了試著從 Queue 的角度思考解法。

留言
avatar-img
留言分享你的想法!
avatar-img
跨越國界的程式人生
2會員
40內容數
自學程式,現為網頁開發工程師,同時擔任線上課程講師,專注於幫助自學程式的開發者找到理想工作。熱愛技術與分享,致力於將複雜的概念轉化為實用知識,讓更多人踏入軟體開發的世界。
2025/07/22
這篇文章深入淺出地介紹堆疊(Stack)這種資料結構,包含其定義、特性、操作流程、JavaScript實作範例、應用場景(例如:回溯、瀏覽器上一頁功能、深度優先搜尋等),以及LeetCode相關題目。文末提供延伸學習資源,並鼓勵讀者提出學習需求。
Thumbnail
2025/07/22
這篇文章深入淺出地介紹堆疊(Stack)這種資料結構,包含其定義、特性、操作流程、JavaScript實作範例、應用場景(例如:回溯、瀏覽器上一頁功能、深度優先搜尋等),以及LeetCode相關題目。文末提供延伸學習資源,並鼓勵讀者提出學習需求。
Thumbnail
2025/07/22
軟體工程師職涯升級計畫啟動!本文深入探討陣列與串列這兩種基礎資料結構,比較其特性、優缺點與常見操作,並輔以JavaScript範例程式碼及時間複雜度分析,幫助讀者學習如何根據不同情境選擇合適的資料結構,寫出更高效的程式。
Thumbnail
2025/07/22
軟體工程師職涯升級計畫啟動!本文深入探討陣列與串列這兩種基礎資料結構,比較其特性、優缺點與常見操作,並輔以JavaScript範例程式碼及時間複雜度分析,幫助讀者學習如何根據不同情境選擇合適的資料結構,寫出更高效的程式。
Thumbnail
2025/07/22
本文深入探討各種資料模型(關聯式、文件、圖形)及其查詢語言(SQL、MapReduce、Cypher、SPARQL),比較其優缺點及適用場景,並以實際案例說明如何選擇最適合的資料模型與查詢語言。
Thumbnail
2025/07/22
本文深入探討各種資料模型(關聯式、文件、圖形)及其查詢語言(SQL、MapReduce、Cypher、SPARQL),比較其優缺點及適用場景,並以實際案例說明如何選擇最適合的資料模型與查詢語言。
Thumbnail
看更多
你可能也想看
Thumbnail
還在煩惱平凡日常該如何增添一點小驚喜嗎?全家便利商店這次聯手超萌的馬來貘,推出黑白配色的馬來貘雪糕,不僅外觀吸睛,層次豐富的雙層口味更是讓人一口接一口!本文將帶你探索馬來貘雪糕的多種創意吃法,從簡單的豆漿燕麥碗、藍莓果昔,到大人系的奇亞籽布丁下午茶,讓可愛的馬來貘陪你度過每一餐,增添生活中的小確幸!
Thumbnail
還在煩惱平凡日常該如何增添一點小驚喜嗎?全家便利商店這次聯手超萌的馬來貘,推出黑白配色的馬來貘雪糕,不僅外觀吸睛,層次豐富的雙層口味更是讓人一口接一口!本文將帶你探索馬來貘雪糕的多種創意吃法,從簡單的豆漿燕麥碗、藍莓果昔,到大人系的奇亞籽布丁下午茶,讓可愛的馬來貘陪你度過每一餐,增添生活中的小確幸!
Thumbnail
這篇內容,將會講解什麼是陣列,以及與陣列相關的知識。包括陣列的簡介、陣列的資料限制、陣列的維度、一維陣列、二維陣列。
Thumbnail
這篇內容,將會講解什麼是陣列,以及與陣列相關的知識。包括陣列的簡介、陣列的資料限制、陣列的維度、一維陣列、二維陣列。
Thumbnail
不論是平面設計、介面設計,都能見排版這一詞。而排版的作用,即在明確的設計目標中,將所有元素做有組織的安排,精確地傳達訊息。
Thumbnail
不論是平面設計、介面設計,都能見排版這一詞。而排版的作用,即在明確的設計目標中,將所有元素做有組織的安排,精確地傳達訊息。
Thumbnail
我們在「【Message Queue - Kafka】不斷的試誤…, 用Docker來嘗試安裝Kafka」有介紹如何架設kafka, 其中我們使用環境變數來進行kafka的配置, 但除了環境變數之外, 其實還能夠用檔案配置的方式來對kafka進行配置, 如此一來我們就可以將配置檔與啟動檔完全分開,
Thumbnail
我們在「【Message Queue - Kafka】不斷的試誤…, 用Docker來嘗試安裝Kafka」有介紹如何架設kafka, 其中我們使用環境變數來進行kafka的配置, 但除了環境變數之外, 其實還能夠用檔案配置的方式來對kafka進行配置, 如此一來我們就可以將配置檔與啟動檔完全分開,
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
Thumbnail
訊息的即時傳遞已然成為現代社會的趨勢了, 而扮演中樞平台的系統架構功能也漸趨複雜完整, Kafka是一個事件流平台, 正好滿足串流時代之下的即時訊息傳遞架構, 因此我們有必要深入來學習這套事件流平台, 不論是自動化、金融交易、IOT、物流…皆離不開即時的需求, 所以就讓我們蹲好馬步來好好的學習一
Thumbnail
訊息的即時傳遞已然成為現代社會的趨勢了, 而扮演中樞平台的系統架構功能也漸趨複雜完整, Kafka是一個事件流平台, 正好滿足串流時代之下的即時訊息傳遞架構, 因此我們有必要深入來學習這套事件流平台, 不論是自動化、金融交易、IOT、物流…皆離不開即時的需求, 所以就讓我們蹲好馬步來好好的學習一
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
上次完成到基本的CRUD及權限控制,後面花了點時間把排序、分頁、圖表總覽的部分做完,其他細節是佈署上線,一般在公司內有專屬的部門處理,僅了解一下流程。
Thumbnail
上次完成到基本的CRUD及權限控制,後面花了點時間把排序、分頁、圖表總覽的部分做完,其他細節是佈署上線,一般在公司內有專屬的部門處理,僅了解一下流程。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News