javascript
JavaScript数据结构与算法——队列详解(上)
隊列基本知識
隊列是一種與列表很像的數據結構,只是隊列只能在尾部插入元素,在隊首刪除元素。隊列用于存放按順序排列的元素,先進先出,就像食堂排隊一樣,后來的只能排在后面,先來的先拿飯,一種井然有序的感覺。
對隊列的主要操作是入隊和出隊,即往隊尾插入元素以及刪除隊首元素,此外隊列還需要有用于訪問隊首元素的方法、返回隊列長度的方法等等,下面我們將一一實現。
JS中隊列的實現
借助JavaScript中的數組,我們可以輕松實現隊列數據結構,數組的push() 方法可以往數組尾插入元素,shift() 方法則可以將數組頭元素刪除,接下來我們來實現隊列數據結構:
實現隊列構造函數
// Created by xiaoqiang on 07/04/2018. function Queue() {this.data = [] // 存放數據this.enQueue = enQueue // 入隊操作this.deQueue = deQueue // 出隊操作this.first = first // 訪問第一個元素this.last = last // 訪問最后一個元素this.toString = toString // 顯示隊列中的數據this.empty = empty // 判斷隊列是否為空 }實現入隊方法
function enQueue(param) {this.data.push(param)return this }使用return this是想在入隊時可以鏈式調用,簡寫代碼達到偷懶的目的。
實現出隊方法
function deQueue() {return this.data.shift() }實現訪問隊首方法
function first() {return this.data[0] }實現訪問隊尾方法
function last() {return this.data[this.data.length - 1] }實現顯示隊列元素方法
function toString() {var str = ''for (var i = 0; i < this.data.length; i++) {str += this.data[i] + '\n'}return str }之所以加上'\n',是想元素以這種格式顯示:
first second three實現隊列是否為空的方法
function empty() {if (this.data.length === 0) {return true} else {return false} }隊列實現完整代碼
// Created by xiaoqiang on 07/04/2018. function Queue() {this.data = [] // 存放數據this.enQueue = enQueue // 入隊操作this.deQueue = deQueue // 出隊操作this.first = first // 訪問第一個元素this.last = last // 訪問最后一個元素this.toString = toString // 顯示隊列中的數據this.empty = empty // 清空隊列數據 }function enQueue(param) {this.data.push(param)return this }function deQueue() {return this.data.shift() }function first() {return this.data[0] }function last() {return this.data[this.data.length - 1] }function toString() {var str = ''for (var i = 0; i < this.data.length; i++) {str += this.data[i] + '\n'}return str }function empty() {if (this.data.length === 0) {return true} else {return false} }測試及結果解釋
測試用例
// 新建隊列對象 var queue = new Queue()// 入隊操作 queue.enQueue('JavaScript').enQueue('Java').enQueue('NodeJS')// 顯示隊列元素 console.log(queue.toString())// 出隊操作 queue.deQueue()// 顯示隊列元素 console.log(queue.toString())// 訪問隊首元素 console.log(queue.first())// 訪問隊尾元素 console.log(queue.last())測試結果
將隊列結構實現代碼以及測試用例代碼都放在queue.js文件中,使用
node queue.js 執行代碼,運行結果如下:
結果解釋
首先進行入隊操作,由于本人在入隊和出隊中使用return this返回當前對象,因此可以鏈式調用,純屬偷懶做法。入隊了三個元素,隨后顯示一下,如圖,顯示正確。
然后進行出隊操作,即刪除了第一個元素,如圖,出隊操作后顯示正確。
最后訪問了一下隊首和隊尾元素,此時只剩兩個元素了,一個是隊首一個是隊尾,顯示正確。
總結:JavaScript實現隊列數據結構完成,邏輯正確。
有錯誤歡迎指出,下篇中將舉一些應用此數據結構的實例,有興趣歡迎閱讀本人后續文章,謝謝。
總結
以上是生活随笔為你收集整理的JavaScript数据结构与算法——队列详解(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 名字大全网名84个
- 下一篇: [JavaScript] 多数前端工程师