javascript實現(xiàn)雙端隊列
本文實例為大家分享了javascript實現(xiàn)雙端隊列的具體代碼,供大家參考,具體內(nèi)容如下
1.雙端隊列
雙端隊列是一種允許我們同時從前端和后端添加和移除元素的特殊隊列
2.雙端隊列的應(yīng)用
一個剛買了票的入如果只是還需要再問一些簡單的信息,就可以直接回到隊伍頭部,另外隊伍末尾的人如果趕時間也可以直接離開隊伍
3.雙端隊列的方法
addFront(element):該方法在雙端隊列前端添加新的元素
addBack(element):該方法在雙端隊列后端添加新的元素(實現(xiàn)方法和 Queue 類中的enqueue 方法相同)。
removeFront():該方法會從雙端隊列前端移除第一個元素
removeBack():該方法會從雙端隊列的后端移除第一個元素
peekFront():該方法返回雙端隊列的第一個元素。
peekBack()):該方法返回雙端隊列后端的第一個元素。
4.實現(xiàn)
class Deque{
constructor(){
this.items = {};
this.count = 0;
this.lowestCount = 0;
}
// 在雙端隊列前端添加新元素
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)文章
提供復(fù)制本站內(nèi)容時出現(xiàn),該文章轉(zhuǎn)自腳本之家等字樣的js代碼
提供復(fù)制本站內(nèi)容時出現(xiàn),該文章轉(zhuǎn)自腳本之家等字樣的js代碼...2007-03-03
js監(jiān)聽元素是否出現(xiàn)在可視區(qū)域詳解(IntersectionObserver)
這篇文章主要給大家介紹了關(guān)于js監(jiān)聽元素是否出現(xiàn)在可視區(qū)域(IntersectionObserver)的相關(guān)資料, IntersectionObserver是一個JavaScript API,用于監(jiān)測一個元素與其父元素或視窗的交叉狀態(tài),需要的朋友可以參考下2024-06-06

