JavaScript数据结构与算法——队列详解(上)
队列基本知识
队列是一种与列表很像的数据结构,只是队列只能在尾部插入元素,在队首删除元素。队列用于存放按顺序排列的元素,先进先出,就像食堂排队一样,后来的只能排在后面,先来的先拿饭,一种井然有序的感觉。
对队列的主要操作是入队和出队,即往队尾插入元素以及删除队首元素,此外队列还需要有用于访问队首元素的方法、返回队列长度的方法等等,下面我们将一一实现。
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数据结构与算法——队列详解(上)相关推荐
- JavaScript数据结构与算法——队列详解(下)
接下来会借助本人另一篇文章JavaScript数据结构与算法--队列详解(上)中实现的队列类及其方法实现一个应用. 配对问题 需求分析:在一个文件中保存着一份男女混合的数据,名称前以B开头表示男士,以 ...
- JavaScript数据结构与算法——列表详解(下),基于Nodejs实现一个列表应用
1.上篇回顾: 上篇我们实现了一个列表类,并添加了一些属性,实现了比较多的方法,本文章将与大家一起使用列表实现一个图书借阅查询系统.需要使用JavaScript数据结构与算法--列表详解(上)中写好的 ...
- JavaScript数据结构与算法——链表详解(上)
注:与之前JavaScript数据结构与算法系列博客不同的是,从这篇开始,此系列博客采用es6语法编写,这样在学数据结构的同时还能对ECMAScript6有进一步的认识,如需先了解es6语法请浏览ht ...
- JavaScript数据结构与算法——列表详解(上)
列表是一组有序的数据,每个数组中的数据项称为元素.数组相关知识不够了解的伙伴可以阅读本人上篇博客在JavaScript中,列表的元素可以是任意数据类型.列表中可以保存不定数量的元素,实际使用时元素的数 ...
- JavaScript数据结构与算法——链表详解(下)
在JavaScript数据结构与算法--链表详解(上)中,我们探讨了一下链表的定义.实现原理以及单链表的实现.接下来我们进一步了解一下链表的其他内容. 1.双向链表 双向链表实现原理图: 与单向链表不 ...
- JavaScript数据结构与算法——数组详解(下)
1.二维与多维数组 JavaScript只支持一维数组,但是通过在数组里保存数组元素的方式,可以轻松创建多维数组. 1.1 创建二维数组 二维数组类似一种由行和列构成的数组表格,在JavaScript ...
- c++数据结构中 顺序队列的队首队尾_数据结构与算法—队列详解
前言 栈和队列是一对好兄弟,前面我们介绍过数据结构与算法-栈详解,那么栈的机制相对简单,后入先出,就像进入一个狭小的山洞,山洞只有一个出口,只能后进先出(在外面的先出去).而队列就好比是一个隧道,后面 ...
- JavaScript数据结构与算法——栈详解
1.栈基本知识 栈是一种特殊的列表,栈的元素只能通过列表的一端访问,这一端成为栈顶,栈具有先进后出的特点,要想访问栈底的元素,就必须将上边的元素先拿出来.对栈的操作主要是入栈和出栈,通过push()和 ...
- JavaScript数据结构与算法——数组详解(上)
1.JS中的数组 JS中的数组是一个特殊的对象,用来表示偏移量的索引是该对象的属性,索引可能是整数,但是这些数字索引会在内部转换成字符串类型(因为JS对象中的属性名必须是字符串).数组在JS中只是一种 ...
最新文章
- 返回指针值的函数(1)
- java中的匿名内部类
- python输入exit怎么退出了_Python 中的 exit() 和 sys.exit()
- matlab 恶俗的缩写combntns()
- .gitignore for Visual Studio项目和解决方案
- 从技术上还原入侵雅虎服务器是怎么一回事
- 北京内推 | ​阿里达摩院智能计算实验室认知智能组招收多模态算法实习生
- 一个炒鸡好用的pdf阅读器
- nginx源码分析--使用GDB调试
- Docker中RocketMQ的安装与使用
- 以“基”取胜:戴尔科技云平台 释放企业新动能
- 第一部分:MongoDB备忘录
- HDU1753 大明A+B
- Android虚拟机Dalvik介绍
- Git 提交代码步骤
- Flixel横板游戏制作教程(五)— Enemies
- mysql opened tables_MySQL_MySQL性能优化之Open_Table配置参数的合理配置建议,在MySQL数据库中,Opened_tables表 - phpStudy...
- 戴尔灵越14电脑U盘重装系统方法分享
- 运动控制器轴回零的配置与实现
- ASPICE SWE3之——模型生成软件详细设计1 配置