队列基本知识
队列是一种与列表很像的数据结构,只是队列只能在尾部插入元素,在队首删除元素。队列用于存放按顺序排列的元素,先进先出,就像食堂排队一样,后来的只能排在后面,先来的先拿饭,一种井然有序的感觉。
对队列的主要操作是入队和出队,即往队尾插入元素以及删除队首元素,此外队列还需要有用于访问队首元素的方法、返回队列长度的方法等等,下面我们将一一实现。
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
实现队列数据结构完成,逻辑正确。
有错误欢迎指出,下篇中将举一些应用此数据结构的实例,有兴趣欢迎阅读本人后续文章,谢谢。