什么是隊列?
隊列可以看做是一個單向通道,先進去的元素,必定會先出來(不考慮優先級的情況下)FIFO first-in-first-out,隊列的元素從隊尾進入,從隊頭出來。
抽象隊列的數據結構類型
size(屬性):隊列中的元素個數
dataSource(屬性):隊列中存儲元素的數組
enqueue(方法):向隊尾添加一個元素
dequeue(方法):刪除隊頭元素
front(方法):讀取隊頭元素
back(方法):讀取隊尾元素
length(方法):返回隊列元素個數
clear(方法):清空隊列
empty(方法):判斷隊列是否為空
toString(方法):顯示所有的隊列元素
有了隊列的抽象數據結構類型,我們可以得到一下的隊列類:
class Queue { constructor() { this.dataSource = []; this.size = 0; } // enqueue:向隊列尾增加元素 enqueue(element) { this.dataSource.push(element); this.size++; } // dequeue: 刪除隊頭元素 dequeue() { if (this.empty()) { this.size--; return this.dataSource.shift(); } } // empty: 判斷是否為空隊列 empty() { if (this.size > 0) { return true; } return false; } // front: 返回隊頭元素 front() { if (this.empty()) { return this.dataSource[0]; } } // back: 返回隊尾元素 back() { if (this.empty()) { return this.dataSource[this.size - 1]; } } // length: 返回隊列元素總數 length() { return this.size; } // clear: 清空隊列 clear() { this.dataSource.length = 0; this.size = 0; } // toString: 返回隊列所有元素 toString() { return this.dataSource; } }
有了這個基本的隊列類,我們可以在上面進行擴展,去解決實際開發中所遇到的問題。
源碼和案例地址:https://gitee.com/mvc_ydb/data-structure/blob/master/queue.js