队列数据结构

  队列遵循先进先出原则的一组有序的项。对可在尾部添加新元素并从顶部移除元素。最新添加的元素必须排在队列的末尾

队列类似栈的例子

创建队列

  • 创建一个类表示队列
  • 队列内应该有一些方法
    • 添加一个新元素到队列尾部
    • 删除队列第一项元素,同时返回这个被删除的元素
    • 返回队列第一个元素元素
    • 判断栈内是否为空
    • 移出栈内所有元素
    • 返回栈内元素个数

创建一个类表示队列

    class Queue{
constructor(){
// count记录队列最后一项的索引
this.count = 0;
this.items = {};
// lowestCount记录队列第一项的索引
this.lowestCount = 0
}
}

添加一个新元素到队列尾部

inqueue(el){
this.items[this.count] = el;
this.count++;
}

删除队列第一项元素,同时返回这个被删除的元素

requeue(el){
if(this.isEmpty()){
return undefined
}
const result = this.items[this.lowestCount]
delete this.items[this.lowestCount]
this.lowestCount++;
return result;
}

查看队列最后元素

peek(){
if(this.isEmpty()){
return '';
}
return this.items[this.lowestCount]
}

判断队列是否为空

isEmpty(){
return this.size() === 0
}

清空队列元素

clear(){
this.items = {};
this.count = 0
this.lowestCount = 0
}

返回队列元素个数

size(){
return this.count - this.lowestCount;
}

创建双端队列

  除以上方法,应该队列的双端的都可以添加删除,同时可以查看 当前队列的第一个元素和最后一个元素

双端队列的前端添加新元素

    addFront(el){
if(this.isEmpty()){
this.addBack()
}else if(this.lowestCount > 0){
this.lowestCount--;
this.items[this.lowestCount] = el
}else{
for (let i = this.count; i > 0; i--) {
this.items[i] = this.items[i - 1];
}
this.count++;
this.lowestCount = 0;
this.items[0] = el;
}
}

双端队列的前端删除新元素

   removeFront() {
if (this.isEmpty()) {
return undefined;
} else {
delete this.items[this.lowestCount];
this.lowestCount++;
}
}

双端队列的前端第一个元素

peekFront() {
return this.items[this.lowestCount];
}

双端队列的后端添加新元素

 addBack(el) {
this.items[this.count] = el;
this.count++;
}

双端队列的后端删除最后一个元素

removeBack() {
if (this.isEmpty()) {
return "0";
} else {
delete this.items[this.count - 1];
this.count--;
}
}

双端队列的后端最后一个元素

peekBack() {
return this.items[this.count - this.lowestCount];
}

判断队列是否为空

isEmpty(){
return this.size() === 0
}

清空队列元素

clear(){
this.items = {};
this.count = 0
this.lowestCount = 0
}

返回队列元素个数

size(){
return this.count - this.lowestCount;
}

数据结构之队列(JavaScript描述)的更多相关文章

  1. 《数据结构与算法JavaScript描述》

    <数据结构与算法JavaScript描述> 基本信息 作者: (美)Michael McMillan 译者: 王群锋 杜欢 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9 ...

  2. 翻阅《数据结构与算法javascript描述》--数组篇

    导读: 这篇文章比较长,介绍了数组常见的操作方法以及一些注意事项,最后还有几道经典的练习题(面试题). 数组的定义: JavaScript 中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性 ...

  3. 数据结构与算法javascript描述

    <数据结构与算法javascript描述>--数组篇 导读: 这篇文章比较长,介绍了数组常见的操作方法以及一些注意事项,最后还有几道经典的练习题(面试题). 数组的定义: JavaScri ...

  4. 列表的实现-----数据结构与算法JavaScript描述 第三章

    实现一个列表 script var booklist = new List(); booklist.append('jsbook'); booklist.append('cssbook'); book ...

  5. 《数据结构与算法JavaScript描述》中的一处错误

    最近在看<数据结构与算法JavaScript描述>这本书,看到选择排序这部分时,发现一个比较大的错误. 原书的选择排序算法是这样的: function selectionSort() { ...

  6. 数据结构与算法 Javascript描述

    数据结构与算法系列主要记录<数据结构与算法 Javascript描述>学习心得

  7. 数据结构与算法JavaScript描述——队列

    注:澄清一个bug: /** * 删除队首的元素: */ function dequeue(){ return this.dataStore.shift(); } 应该有return:   队列是一种 ...

  8. 数据结构与算法JavaScript描述——使用队列

    1.使用队列:方块舞的舞伴分配问题 前面我们提到过,经常用队列模拟排队的人.下面我们使用队列来模拟跳方块舞的人.当 男男女女来到舞池,他们按照自己的性别排成两队.当舞池中有地方空出来时,选两个队 列中 ...

  9. 队列--数据结构与算法JavaScript描述(5)

    队列 Queue 概念 队列是一种列表,但队列只能在队尾插入元,在队首删除元素. 队列是一种先进先出的数据结构,用于存储按顺序排列的数据,被用在很多地方,比如提交操作系统执行的一系列进程.打印任务池等 ...

随机推荐

  1. JVM相关 - 深入理解 System.gc()

    本文基于 Java 17-ea,但是相关设计在 Java 11 之后是大致一样的 我们经常在面试中询问 System.gc() 究竟会不会立刻触发 Full GC,网上也有很多人给出了答案,但是这些答 ...

  2. 后端程序员之路 37、Akka、Actor、Scala初窥

    Akkahttp://akka.io/ Akka 是一个用 Scala 编写的库,用于简化编写容错的.高可伸缩性的 Java 和 Scala 的 Actor 模型应用,是一个广泛运用的分布式应用框架. ...

  3. 剑指 Offer 38. 字符串的排列 + 无重复元素的全排列

    剑指 Offer 38. 字符串的排列 Offer_38 题目描述 解题思路 可以使用递归实现全排列,每次都确定一个数的位置,当所有位置的数都确定后即表示一个排列. 但是考虑到本题需要排除重复的排列, ...

  4. HDOJ-3065(AC自动机+每个模板串的出现次数)

    病毒侵袭持续中 HDOJ-3065 第一个需要注意的是树节点的个数也就是tree的第一维需要的空间是多少:模板串的个数*最长模板串的长度 一开始我的答案总时WA,原因是我的方法一开始不是这样做的,我是 ...

  5. YSU小吃街

    贪心贪不过,暴力搜就完事了 注意不连通情况 #include<iostream> #include<sstream> #include<cstdio> #inclu ...

  6. 【粉丝问答10】C语言关键字static的使用详解

    视频地址:https://www.ixigua.com/6935761378816819748 粉丝提问 粉丝问题,总结一下: 关键字static的使用方法. 要想搞清楚关键字static的使用方法, ...

  7. cve-2019-2725 反序列化远程代码执行

    描述:部分版本WebLogic中默认包含的wls9_async_response包,为WebLogic Server提供异步通讯服务.由于该WAR包在反序列化处理输入信息时存在缺陷,攻击者可以发送精心 ...

  8. uwsgi+nginx+virtualenv+supervisor

    一.linux安装Python 1.依赖 `yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl ...

  9. Flutter,Weex,React Native比较

  10. 浅析MyBatis(二):手写一个自己的MyBatis简单框架

    在上一篇文章中,我们由一个快速案例剖析了 MyBatis 的整体架构与整体运行流程,在本篇文章中笔者会根据 MyBatis 的运行流程手写一个自定义 MyBatis 简单框架,在实践中加深对 MyBa ...