- 是一种遵循先进先出原则的有序集合。
- 添加新元素的一端称为队尾,另一端称为对首。
图示:
- 入队
- 出队
我们需要实现以下功能:
- enqueue() 入队方法
- dequeue() 出队方法
- top 获取对首值
- size 获取队列的元素个数
- clear 清空队列
基于数组实现
- 入队问题不大
- 出队数组而言,除了通过unshift删除首位元素外,还需要通过delate彻底删除首项,因为会占位
class Queue {
constructor () {
// 首先定义存储队列数据的全局数组
this.queue = []
// 记录对列长度
this.count = 0
}
// 入队
enQueue (item) {
// 直接入队即可
this.queue[this.count++] = item
}
// 出队
deQueue () {
// 先检测是否为空
if (this.isEmpty()) {
return
}
// 删除第一个元素,delete会继续占位,无继续出队
// delete this.queue[0]
// 利用数组方法移除第一个元素,unshift()
this.count--
return this.queue.unshift()
}
isEmpty () {
return this.count === 0
}
top () {
if (this.isEmpty()) {
return
}
return this.queue[0]
}
size () {
return this.count
}
clear () {
this.queue = []
this.count = 0
}
}
const q = new Queue()
基于对象实现
- 对象不会出现占位情况,但是需要额外定义head来记录对首键值
class Queue {
constructor () {
// 定义队列对象
this.queue = {}
this.count = 0
// 用于记录对首的键
this.head = 0
}
// 入队
enQueue (item) {
this.queue[this.count++] = item
}
// 出队
deQueue () {
// 检查是否为空
if (this.isEmpty()) {
return
}
// 缓存队首值
const headData = this.queue[this.head]
// 删除队首
delete this.queue[this.head]
// 更新队列长度
this.count--
// 更新队首键值
this.head++
// 返回被删除的队首值
return headData
}
isEmpty () {
return this.count === 0
}
}
const q = new Queue()