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():該方法會(huì)從雙端隊(duì)列前端移除第一個(gè)元素
removeBack():該方法會(huì)從雙端隊(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)容,希望對(duì)大家的學(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-07
JS實(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-09
JavaScript中創(chuàng)建對(duì)象和繼承示例解讀
這篇文章主要介紹了JavaScript中怎樣創(chuàng)建對(duì)象和繼承,需要的朋友可以參考下2014-02-02
JavaScript庫之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-02
JavaScript ECMA-262-3 深入解析(一):執(zhí)行上下文實(shí)例分析
這篇文章主要介紹了JavaScript ECMA-262-3 執(zhí)行上下文,結(jié)合實(shí)例形式詳細(xì)分析JavaScript ECMA執(zhí)行上下文相關(guān)概念、原理與操作注意事項(xiàng),需要的朋友可以參考下2020-04-04
JavaScript 面向?qū)ο蠡A(chǔ)簡單示例
這篇文章主要介紹了JavaScript 面向?qū)ο蠡A(chǔ),結(jié)合簡單實(shí)例形式分析了JavaScript面向?qū)ο蟪绦蛟O(shè)計(jì)中類的定義、類方法與屬性相關(guān)操作技巧,需要的朋友可以參考下2019-10-10

