資料結構筆記: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
跨越國界的程式人生
5會員
41內容數
自學程式,現為網頁開發工程師,同時擔任線上課程講師,專注於幫助自學程式的開發者找到理想工作。熱愛技術與分享,致力於將複雜的概念轉化為實用知識,讓更多人踏入軟體開發的世界。
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
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
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及權限控制,後面花了點時間把排序、分頁、圖表總覽的部分做完,其他細節是佈署上線,一般在公司內有專屬的部門處理,僅了解一下流程。
Thumbnail
列出一套完整的程式 程式設計有許多種方法,不過通常會先列出清單的再逐一執行,這樣會加快程式設計的速度。設計通常會採取順推的辦法。所以順推的程式設計方式就是經歷觀念溝通、系統分析、資料統合、權限管理、頻率與時間、後台管理、畫面設計等等階段後,將框架設計完了以後,先列出一套完整的程式,將所有使用者都確
Thumbnail
列出一套完整的程式 程式設計有許多種方法,不過通常會先列出清單的再逐一執行,這樣會加快程式設計的速度。設計通常會採取順推的辦法。所以順推的程式設計方式就是經歷觀念溝通、系統分析、資料統合、權限管理、頻率與時間、後台管理、畫面設計等等階段後,將框架設計完了以後,先列出一套完整的程式,將所有使用者都確
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val
Thumbnail
大數據時代下,Log的多元應用至關重要。Log生成龐大,格式各異,特別金融業需合規。探討Log廣泛應用、資訊安全、IT管理和商業決策。建立Log管理系統核心深入法規,強化IT治理、權限控管。一站式Log管理平台,確保資訊安全合規。
Thumbnail
大數據時代下,Log的多元應用至關重要。Log生成龐大,格式各異,特別金融業需合規。探討Log廣泛應用、資訊安全、IT管理和商業決策。建立Log管理系統核心深入法規,強化IT治理、權限控管。一站式Log管理平台,確保資訊安全合規。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News