队列数据结构

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

队列类似栈的例子

创建队列

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

创建一个类表示队列

    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. 查看手机CPU每个APP利用率

    adb   shell   top   -m   5

  2. 第39天学习打卡(多线程 Thread Runnable 初始并发问题 Callable )

    多线程详解 01线程简介 Process与Thread 程序:是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念. 进程则是执行程序的一次执行过程,它是一个动态的概念.是系统资源分配的 ...

  3. 如何删除Image元素下面的空白行及为什么行内元素有底线

    翻译练习 原博客地址:Removing White Space Below Image Elements, or Why Inline Elements Have Descenders HTML中Im ...

  4. 一些 html+css 细节

    一. input 光标(插入符)颜色 input: { caret-color: #c0c0ff; } 二. 修改 placeholder 颜色 input::placeholder { color: ...

  5. while、do...while和for循环

    一.循环 1.1 定义 当满足一定条件的时候,重复执行某一段代码的操作 while和for和do...while是java中的循环 二.while循环 2.1 定义 int i = 0: 初始化值 w ...

  6. 一文帮你搞懂 Android 文件描述符

    介绍文件描述符的概念以及工作原理,并通过源码了解 Android 中常见的 FD 泄漏. 一.什么是文件描述符? 文件描述符是在 Linux 文件系统的被使用,由于Android基 于Linux 系统 ...

  7. java 方法详解

    什么是方法 方法的定义和调用 值传递与引用传递 值传递:指的是在方法调用时,传递的是参数是按值的拷贝传递. 特点:传递的是值的拷贝,也就是传递后就互不相关了. 引用传递:指的是在方法调用时,传递的参数 ...

  8. 奇思妙想 CSS 文字动画

    之前有些过两篇关于字体的文章,是关于如何定义字体的: 你该知道的字体 font-family Web 字体 font-family 再探秘 本文将会和这篇 -- CSS 奇思妙想边框动画类似,讲一些文 ...

  9. FreeBSD jail 折腾记(二)

    FreeBSD jail 折腾记(二) 创建jail目录 创建4个 分别是模板 骨架 数据 项目 创建模板目录 mkdir -p /jail/j1 # 然后放入基本目录,上篇说过不再写 创建骨架目录 ...

  10. 解决VM 与 Device/Credential Guard 不兼容(全网有效解决思路)

    为什么要写这篇文章先说背景:前段时间因为学习Linux系统需要,自己本机用的是Windows系统,那这里就需要用到虚拟机来创建虚拟环境用来支持Linux系统 1: 于是乎,自己很激动的下载了vm虚拟机 ...