JS 算法与数据结构之队列
一、 什么是队列
队列是一种先进先出(FIFO,First-in-first-out)的数据结构,其数据智能在队尾插入,在队首删除。
可以将队列想象成在食堂排队的人群,排在最前面的人第一个打饭,后面来的人只能在队尾排队,直到轮到他们为止。
二、队列的操作
1、入队
使用 enqueue() 方法, 在队尾插入新元素。
2、出队
使用 dequeue() 方法, 删除队头的元素。
3、读取队头元素
使用 front() 方法,读取队首的元素。
4、读取队尾元素
使用 back() 方法,读取队尾的元素。
5、显示队列内的所有元素
使用 toString() 方法,显示队列的所有元素。
6、表示队列内是否含有元素
使用 empty() 方法,判断队列是否为空。
三、队列的实现
1、定义 Queue 类
function Queue() {
this.dataStore = []
this.enqueue = enqueue
this.dequeue = dequeue
this.front = front
this.back = back
this.toString = toString
this.empty = empty
}
2、实现 enqueue 方法
function enqueue(element) {
this.dataStore.push(element)
}
3、实现 dequeue 方法
function dequeue() {
return this.dataStore.shift()
}
4、实现 front 方法
function front() {
return this.dataStore[0]
}
5、实现 back 方法
function back() {
return this.dataStore[this.dataStore.length - 1]
}
6、实现 toString 方法
function toString() {
var retStr = ''
for (var i = 0; i < this.dataStore.length; ++i) {
retStr += this.dataStore[i] + '\n'
}
return retStr
}
7、实现 empty 方法
function empty() {
if (this.dataStore.length == 0) {
return true
} else {
return false
}
}
8、测试 Queue 类的实现
var q = new Queue()
q.enqueue('a')
q.enqueue('b')
q.enqueue('c')
console.log(q.toString())
// "a"
// "b"
// "c"
q.dequeue()
console.log(q.toString())
// "b"
// "c"
console.log(q.front()) // "b"
console.log(q.back()) // "c"
console.log(q.empty()) // false
q.dequeue()
q.dequeue()
console.log(q.empty()) // true