Skip to main content

Queue

Queue 是一種 FIFO (First In First Out) 資料結構。

第一個加入的元素,會被第一個移除。

可應用在排隊等待處理的功能,像是對戰遊戲配對時,等越久的應該要先被排到。

Implementation​

只要有符合 FIFO (First In First Out) 的規則,都可以算是 Queue 結構。

像是 JavaScript 中, Array 本身的 Shift 與 Push 組合或是 Pop 與 Unshift 組合。

而一樣的,陣列中的 Shift 與 Unshift 方法會讓所有元素都更新 Index ,所以使用陣列來實作 Queue 在效能上可能要考慮一下。

而在之前的 Linked List 實作中, Shift 與 Push 組合或是 Pop 與 Unshift 組合也符合 Queue 結構。

但 Pop 方法需要遍歷整個 Linked List ,顯然 Shift 與 Push 的效能會比較好。

同理,Doubly Linked List 則沒差,因為有雙向指標,要從頭新增或移除或從後新增或移除效能上都一樣。

以下實作簡單的 Queue 結構:

class Node {
constructor() {
this.value = value;
this.next = null;
}
}
class Queue {
constructor() {
this.first = null;
this.last = null;
this.size = 0;
}
enqueue(val) {
const node = new Node(val)
if (!this.first) {
this.first = node
this.last = node
} else {
this.last.next = node
this.last = node
}
return ++this.size
}
dequeue() {
if (!this.first) return null
const temp = this.first
if (this.first === this.last) {
this.last = null
}
this.first = this.first.next
this.size--
return temp.value
}
}

Big O Complexity​

InsertionRemovalSearchAccess
O(1)O(1)O(n)O(n)