双端队列是与队列类似的项的有序集合,其实本质就是队列,只不过是前端与后端都支持插入和删除操作的队列,更实用,所以也就不存在先进先出这种说法了。
我们可以通过数组来实现,但是为了写出一个更高效得数据结构,使用对象来实现。
class Deque{
constructor(){
this.count= 0;
this.lowestCount = 0;
this.items = {};
}
isEmptry(){
return this.size() === 0;
}
size(){
return this.count - this.lowestCount;
}
clear(){
this.count= 0;
this.lowestCount = 0;
this.items = {};
}
toString(){
if(this.isEmptry()){
return '';
}
let objString = `${this.items[this.lowestCount]}`;
for (let i=this.lowestCount+1;i<this.count;i++) {
objString = `${objString},${this.items[i]}`;
}
return objString;
}
addBack(el){
this.item[this.count]=el;
this.count++;
}
addFront(el){
if(this.isEmptry()){
this.addBack(el);
}else if(this.lowestCount>0){
this.lowestCount--;
this.item[this.lowestCount]=el;
}else{
for(let i=this.count;i>0;i--){
this.item[i]=this.item[i-1];
}
this.count++;
this.lowestCount=0;
this.item[0]=el;
}
}
removeFront(){
if(this.isEmptry()){
return undefined;
}
let c = this.items[this.lowestCount];
delete this.items[this.lowestCount];
this.lowestCount++;
return c;
}
removeBack(){
if (this.isEmpty()) {
return undefined;
}
this.count--;
let c = this.items[this.count];
delete this.items[this.count];
return c;
}
peekFront() {
if (this.isEmpty()) {
return undefined;
}
return this.items[this.lowestCount];
}
peekBack() {
if (this.isEmpty()) {
return undefined;
}
return this.items[this.count - 1];
}
}
也可以使用链表来实现这种结构
链表的实现
该内容借鉴于学习javascript数据结构与算法。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。