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