队列数据结构

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

队列类似栈的例子

创建队列

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

创建一个类表示队列

    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. Spark + GraphX + Pregel

    Spark+GraphX图 Q:什么是图?图的应用场景 A:图是由顶点集合(vertex)及顶点间的关系集合(边edge)组成的一种网状数据结构,表示为二元组:Gragh=(V,E),V\E分别是顶点 ...

  2. sql语句的练习,已练习的会以绿色标注!!!

    表架构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师 ...

  3. ElasticSearch 中的 Mapping

    公号:码农充电站pro 主页:https://codeshellme.github.io 1,ES 中的 Mapping ES 中的 Mapping 相当于传统数据库中的表定义,它有以下作用: 定义索 ...

  4. css3自动换行排列

    如果一行放不下就会自动换行 display: flex; flex-wrap: wrap; 示例 : html <div class="container"> < ...

  5. SSAS表格模型

    Analysis Services 是在决策支持和业务分析中使用的分析数据引擎 (Vertipaq) . 它为商业智能提供企业级语义数据模型功能 (BI) .数据分析和报告应用程序,如 Power B ...

  6. Django 报错 Reverse for 'content' not found. 'content' is not a valid view function or pattern name.

    Django 报错 Reverse for 'content' not found. 'content' is not a valid view function or pattern name. 我 ...

  7. mysql从一个表提取数据更新另外一个表(修复表数据的不一致)

    目前碰到一个数据不一致的情况,有两张表,一张项目表,一张项目成员表,项目表有个字段是项目工作时间,是项目成员的工作时间汇总.是由于该了逻辑,所以要把数据改成一致. 项目表的大致结构如下. 表名:pro ...

  8. python基础学习之文件的基础操作方法

    打开文件方法 open('xx') 注意,open后括号内加的是文件名,这里默认是当前文件的相对路径,如果不在当前文件层,需要绝对路径,默认打开方法是读取,即read,默认的解码器为当前系统的解码器w ...

  9. Hibernate学习实例

    一 Hibernate简介 Hibernate是一种Java语言下的对象关系映射(ORM)解决方案.为面向对象的领域模型到传统的关系型数据库的映射提供了一个使用方便的框架. 二 Hibernate设计 ...

  10. Linux 三剑客之 awk 实战详解教程

    我们知道 Linux 三剑客,它们分别是:grep.sed.awk.在前边已经讲过 grep 和 sed,没看过的同学可以直接点击阅读,今天要分享的是更为强大的 awk. sed 可以实现非交互式的字 ...