JavaScript 实现双端队列详解
本文介绍如何使用 JavaScript 实现双端队列(Deque)数据结构。双端队列允许从前端和后端同时添加和移除元素。文章详细讲解了 addFront、addBack、removeFront、removeBack 等核心方法,并提供了完整的 JavaScript 类实现代码,帮助开发者理解其应用场景与具体编码实现。
以下通过具体代码示例,展示如何在 JavaScript 中实现双端队列,供读者参考。
1. 双端队列概念
双端队列(Deque)是一种特殊的线性结构,支持从队列的前端和后端同时进行元素的插入与删除操作。
2. 双端队列的应用场景
在实际场景中,例如售票队伍,若刚购票者仅需补充少量信息,可直接返回队首;若队尾人员时间紧迫,也可直接从队尾离开。
3. 双端队列的核心方法
双端队列主要包含以下操作方法: - addFront(element):在双端队列的前端添加新元素。 - addBack(element):在双端队列的后端添加新元素,其实现逻辑与标准队列(Queue)中的 enqueue 方法一致。 - removeFront():从双端队列的前端移除并返回第一个元素。 - removeBack():从双端队列的后端移除并返回第一个元素。 - peekFront():返回双端队列前端的元素,但不移除。 - peekBack():返回双端队列后端的元素,但不移除。
4. 代码实现
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);
以上内容为本文的全部介绍,希望能为读者的学习提供有益帮助,同时也欢迎持续关注本站获取更多技术分享。
JS大数值转字符串出现科学计数法怎么办
2026-11-05 17:09:21
JS split切割后出现空字符串怎么过滤
2026-11-05 16:00:30
在 React 或 Vue 项目中封装使用 JS 节流防抖
2026-11-05 15:27:29
JavaScript中怎么将带小数的字符串转为整数?
2026-11-05 14:32:38
怎么用JavaScript策略模式重构电商促销计算逻辑?
2026-11-05 14:01:09
