双端队列的定义是什么,JS怎么实现双端队列的
Admin 2022-06-17 群英技术资讯 963 次浏览
在实际应用中,我们有时候会遇到“双端队列的定义是什么,JS怎么实现双端队列的”这样的问题,我们该怎样来处理呢?下文给大家介绍了解决方法,希望这篇“双端队列的定义是什么,JS怎么实现双端队列的”文章能帮助大家解决问题。1.双端队列
双端队列是一种允许我们同时从前端和后端添加和移除元素的特殊队列
一个刚买了票的入如果只是还需要再问一些简单的信息,就可以直接回到队伍头部,另外队伍末尾的人如果赶时间也可以直接离开队伍
addFront(element):该方法在双端队列前端添加新的元素
addBack(element):该方法在双端队列后端添加新的元素(实现方法和 Queue 类中的enqueue 方法相同)。
removeFront():该方法会从双端队列前端移除第一个元素
removeBack():该方法会从双端队列的后端移除第一个元素
peekFront():该方法返回双端队列的第一个元素。
peekBack()):该方法返回双端队列后端的第一个元素。
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);
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
使用JS如何画平滑曲线?在实际的项目中,我们常会遇到在各种图表框架中画平滑曲线的需求,那么这要怎样做呢?对此下文给大家分享一下JS如实现平滑曲线的实例,感兴趣的朋友可以参考。
Axios 毋庸多说大家在前端开发中常用的一个发送 HTTP 请求的库,用过的都知道,篇文章主要给大家介绍了关于vue中如何简单封装axios的相关资料,需要的朋友可以参考下
这篇文章主要介绍的是前端JavaScript中的反射和代理,本文主要围绕JavaScript中的内置Reflect、JavaScript中的内置Proxy、Proxy实现观察者模式三个话题展开文章内容,需要的朋友可以参一考下
这篇文章主要给大家分享的是JS精准计算的内容,下文有具体的实例及详解,对大家学习和理解JS精准计算有一定的帮助,感兴趣的朋友就跟随小编来学习一下吧。
这篇文章给大家分享的是用vue怎样做侧边的抽屉弹窗效果,以下代码比较简单,主要就是实现 侧边弹窗而且不会影响页面操作的方式,文中示例代码介绍的非常详细,感兴趣的朋友接下来一起跟随小编看看吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008