javascript實(shí)現(xiàn)雙端隊(duì)列
本文實(shí)例為大家分享了javascript實(shí)現(xiàn)雙端隊(duì)列的具體代碼,供大家參考,具體內(nèi)容如下
1.雙端隊(duì)列
雙端隊(duì)列是一種允許我們同時(shí)從前端和后端添加和移除元素的特殊隊(duì)列
2.雙端隊(duì)列的應(yīng)用
一個(gè)剛買了票的入如果只是還需要再問一些簡單的信息,就可以直接回到隊(duì)伍頭部,另外隊(duì)伍末尾的人如果趕時(shí)間也可以直接離開隊(duì)伍
3.雙端隊(duì)列的方法
addFront(element):該方法在雙端隊(duì)列前端添加新的元素
addBack(element):該方法在雙端隊(duì)列后端添加新的元素(實(shí)現(xiàn)方法和 Queue 類中的enqueue 方法相同)。
removeFront():該方法會從雙端隊(duì)列前端移除第一個(gè)元素
removeBack():該方法會從雙端隊(duì)列的后端移除第一個(gè)元素
peekFront():該方法返回雙端隊(duì)列的第一個(gè)元素。
peekBack()):該方法返回雙端隊(duì)列后端的第一個(gè)元素。
4.實(shí)現(xiàn)
class Deque{ constructor(){ this.items = {}; this.count = 0; this.lowestCount = 0; } // 在雙端隊(duì)列前端添加新元素 addFront(element){ if(this.isEmpty()){ this.addBack(element); } else if(this.lowestCount > 0){ this.lowestCount -- ; this.items[this.lowestCount] = element; } else{ for(let i=this.count;i>0;i--){ this.items[i] = this.items[i-1]; } this.lowestCount = 0; this.items[this.lowestCount] = element; this.count++; } }; addBack(element){ this.count++; this.items[this.count-1] = element; }; removeFront(){ if(this.isEmpty()){ return undefined; } const result = this.items[this.lowestCount]; delete this.items[this.lowestCount]; this.lowestCount++; return result; }; removeBack(){ if(this.isEmpty()){ return undefined; } const result = this.items[this.count-1]; delete this.items[this.count-1]; this.count--; return result; }; peekFront(){ if(this.isEmpty()){ return null; } return this.items[this.lowestCount]; }; peekBack(){ if(this.isEmpty()){ return null; } return this.items[this.count-1]; }; isEmpty(){ return this.count - this.lowestCount == 0; } size(){ return this.count - this.lowestCount; } toString(){ if(this.isEmpty()){ return ''; } let objString = `${this.items[this.lowestCount]}`; for(var i=this.lowestCount+1;i<this.count;i++){ objString = `${objString},${this.items[i]}`; } return objString; } clear(){ this.items={}; this.count = 0; this.lowestCount = 0; } } const deque = new Deque(); deque.addFront('John'); deque.addFront('Jack'); deque.addFront('Amy'); deque.addBack('Lisa'); // deque.removeFront(); // deque.removeBack(); console.log(deque.size()); console.log(deque.toString()); console.log(deque); console.log(deque.isEmpty()); console.log(deque.clear()); console.log(deque);
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
微信小程序?qū)崿F(xiàn)點(diǎn)擊出現(xiàn)彈窗
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)點(diǎn)擊出現(xiàn)彈窗,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07JS實(shí)現(xiàn)不規(guī)則TAB選項(xiàng)卡效果代碼
這篇文章主要介紹了JS實(shí)現(xiàn)不規(guī)則TAB選項(xiàng)卡效果代碼,通過簡單的JavaScript響應(yīng)鼠標(biāo)事件動(dòng)態(tài)變換元素樣式實(shí)現(xiàn)不規(guī)則選項(xiàng)卡效果,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-09-09JavaScript中創(chuàng)建對象和繼承示例解讀
這篇文章主要介紹了JavaScript中怎樣創(chuàng)建對象和繼承,需要的朋友可以參考下2014-02-02JavaScript庫之vanilla-tilt使用教程(一個(gè)平滑的3D傾斜庫)
vanilla-tilt.js是Javascript中一個(gè)平滑的3D傾斜庫,可以讓網(wǎng)頁的一些控件變得動(dòng)態(tài)起來,下面這篇文章主要給大家介紹了關(guān)于JavaScript庫之vanilla-tilt使用的相關(guān)資料,需要的朋友可以參考下2023-02-02JavaScript ECMA-262-3 深入解析(一):執(zhí)行上下文實(shí)例分析
這篇文章主要介紹了JavaScript ECMA-262-3 執(zhí)行上下文,結(jié)合實(shí)例形式詳細(xì)分析JavaScript ECMA執(zhí)行上下文相關(guān)概念、原理與操作注意事項(xiàng),需要的朋友可以參考下2020-04-04JavaScript 面向?qū)ο蠡A(chǔ)簡單示例
這篇文章主要介紹了JavaScript 面向?qū)ο蠡A(chǔ),結(jié)合簡單實(shí)例形式分析了JavaScript面向?qū)ο蟪绦蛟O(shè)計(jì)中類的定義、類方法與屬性相關(guān)操作技巧,需要的朋友可以參考下2019-10-10