队列基本知识

队列是一种与列表很像的数据结构,只是队列只能在尾部插入元素,在队首删除元素。队列用于存放按顺序排列的元素,先进先出,就像食堂排队一样,后来的只能排在后面,先来的先拿饭,一种井然有序的感觉。
对队列的主要操作是入队和出队,即往队尾插入元素以及删除队首元素,此外队列还需要有用于访问队首元素的方法、返回队列长度的方法等等,下面我们将一一实现。

JS中队列的实现

借助JavaScript中的数组,我们可以轻松实现队列数据结构,数组的push() 方法可以往数组尾插入元素,shift() 方法则可以将数组头元素删除,接下来我们来实现队列数据结构:

实现队列构造函数

// Created by xiaoqiang on 07/04/2018.
function Queue() {this.data = []            // 存放数据this.enQueue = enQueue    // 入队操作this.deQueue = deQueue    // 出队操作this.first = first        // 访问第一个元素this.last = last          // 访问最后一个元素this.toString = toString  // 显示队列中的数据this.empty = empty        // 判断队列是否为空
}

实现入队方法

function enQueue(param) {this.data.push(param)return this
}

使用return this是想在入队时可以链式调用,简写代码达到偷懒的目的。

实现出队方法

function deQueue() {return this.data.shift()
}

实现访问队首方法

function first() {return this.data[0]
}

实现访问队尾方法

function last() {return this.data[this.data.length - 1]
}

实现显示队列元素方法

function toString() {var str = ''for (var i = 0; i < this.data.length; i++) {str += this.data[i] + '\n'}return str
}

之所以加上'\n',是想元素以这种格式显示:

first
second
three

实现队列是否为空的方法

function empty() {if (this.data.length === 0) {return true} else {return false}
}

队列实现完整代码

// Created by xiaoqiang on 07/04/2018.
function Queue() {this.data = []            // 存放数据this.enQueue = enQueue    // 入队操作this.deQueue = deQueue    // 出队操作this.first = first        // 访问第一个元素this.last = last          // 访问最后一个元素this.toString = toString  // 显示队列中的数据this.empty = empty        // 清空队列数据
}function enQueue(param) {this.data.push(param)return this
}function deQueue() {return this.data.shift()
}function first() {return this.data[0]
}function last() {return this.data[this.data.length - 1]
}function toString() {var str = ''for (var i = 0; i < this.data.length; i++) {str += this.data[i] + '\n'}return str
}function empty() {if (this.data.length === 0) {return true} else {return false}
}

测试及结果解释

测试用例

// 新建队列对象
var queue = new Queue()// 入队操作
queue.enQueue('JavaScript').enQueue('Java').enQueue('NodeJS')// 显示队列元素
console.log(queue.toString())// 出队操作
queue.deQueue()// 显示队列元素
console.log(queue.toString())// 访问队首元素
console.log(queue.first())// 访问队尾元素
console.log(queue.last())

测试结果

将队列结构实现代码以及测试用例代码都放在queue.js文件中,使用
node queue.js 执行代码,运行结果如下:

结果解释

首先进行入队操作,由于本人在入队和出队中使用return this返回当前对象,因此可以链式调用,纯属偷懒做法。入队了三个元素,随后显示一下,如图,显示正确。
然后进行出队操作,即删除了第一个元素,如图,出队操作后显示正确。
最后访问了一下队首和队尾元素,此时只剩两个元素了,一个是队首一个是队尾,显示正确。
总结:JavaScript实现队列数据结构完成,逻辑正确。
有错误欢迎指出,下篇中将举一些应用此数据结构的实例,有兴趣欢迎阅读本人后续文章,谢谢。

JavaScript数据结构与算法——队列详解(上)相关推荐

  1. JavaScript数据结构与算法——队列详解(下)

    接下来会借助本人另一篇文章JavaScript数据结构与算法--队列详解(上)中实现的队列类及其方法实现一个应用. 配对问题 需求分析:在一个文件中保存着一份男女混合的数据,名称前以B开头表示男士,以 ...

  2. JavaScript数据结构与算法——列表详解(下),基于Nodejs实现一个列表应用

    1.上篇回顾: 上篇我们实现了一个列表类,并添加了一些属性,实现了比较多的方法,本文章将与大家一起使用列表实现一个图书借阅查询系统.需要使用JavaScript数据结构与算法--列表详解(上)中写好的 ...

  3. JavaScript数据结构与算法——链表详解(上)

    注:与之前JavaScript数据结构与算法系列博客不同的是,从这篇开始,此系列博客采用es6语法编写,这样在学数据结构的同时还能对ECMAScript6有进一步的认识,如需先了解es6语法请浏览ht ...

  4. JavaScript数据结构与算法——列表详解(上)

    列表是一组有序的数据,每个数组中的数据项称为元素.数组相关知识不够了解的伙伴可以阅读本人上篇博客在JavaScript中,列表的元素可以是任意数据类型.列表中可以保存不定数量的元素,实际使用时元素的数 ...

  5. JavaScript数据结构与算法——链表详解(下)

    在JavaScript数据结构与算法--链表详解(上)中,我们探讨了一下链表的定义.实现原理以及单链表的实现.接下来我们进一步了解一下链表的其他内容. 1.双向链表 双向链表实现原理图: 与单向链表不 ...

  6. JavaScript数据结构与算法——数组详解(下)

    1.二维与多维数组 JavaScript只支持一维数组,但是通过在数组里保存数组元素的方式,可以轻松创建多维数组. 1.1 创建二维数组 二维数组类似一种由行和列构成的数组表格,在JavaScript ...

  7. c++数据结构中 顺序队列的队首队尾_数据结构与算法—队列详解

    前言 栈和队列是一对好兄弟,前面我们介绍过数据结构与算法-栈详解,那么栈的机制相对简单,后入先出,就像进入一个狭小的山洞,山洞只有一个出口,只能后进先出(在外面的先出去).而队列就好比是一个隧道,后面 ...

  8. JavaScript数据结构与算法——栈详解

    1.栈基本知识 栈是一种特殊的列表,栈的元素只能通过列表的一端访问,这一端成为栈顶,栈具有先进后出的特点,要想访问栈底的元素,就必须将上边的元素先拿出来.对栈的操作主要是入栈和出栈,通过push()和 ...

  9. JavaScript数据结构与算法——数组详解(上)

    1.JS中的数组 JS中的数组是一个特殊的对象,用来表示偏移量的索引是该对象的属性,索引可能是整数,但是这些数字索引会在内部转换成字符串类型(因为JS对象中的属性名必须是字符串).数组在JS中只是一种 ...

最新文章

  1. 返回指针值的函数(1)
  2. java中的匿名内部类
  3. python输入exit怎么退出了_Python 中的 exit() 和 sys.exit()
  4. matlab 恶俗的缩写combntns()
  5. .gitignore for Visual Studio项目和解决方案
  6. 从技术上还原入侵雅虎服务器是怎么一回事
  7. 北京内推 | ​阿里达摩院智能计算实验室认知智能组招收多模态算法实习生
  8. 一个炒鸡好用的pdf阅读器
  9. nginx源码分析--使用GDB调试
  10. Docker中RocketMQ的安装与使用
  11. 以“基”取胜:戴尔科技云平台 释放企业新动能
  12. 第一部分:MongoDB备忘录
  13. HDU1753 大明A+B
  14. Android虚拟机Dalvik介绍
  15. Git 提交代码步骤
  16. Flixel横板游戏制作教程(五)— Enemies
  17. mysql opened tables_MySQL_MySQL性能优化之Open_Table配置参数的合理配置建议,在MySQL数据库中,Opened_tables表 - phpStudy...
  18. 戴尔灵越14电脑U盘重装系统方法分享
  19. 运动控制器轴回零的配置与实现
  20. ASPICE SWE3之——模型生成软件详细设计1 配置

热门文章

  1. linux挂载NTFS分区
  2. IBM开放Watson AI服务增加云服务使用
  3. 二值图片连续区域检测
  4. Python学习笔记字符串Str
  5. Centos挂载硬盘
  6. Android文档 - 账户管理器概述
  7. 如何在servlet刚启动时候获取服务器根目录?
  8. msyql show命令(转)
  9. jQuery 1.4单独为某个动画动作设效果
  10. Linux终端操作MySQL常用命令