JS
实现队列结构
一、前言
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,是一种先进先出(FIFO)的数据结构,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
想要使用js
实现队列结构的话,需要保证实现的队列具备以下基础功能:
-
enqueue 新增元素
-
dequeue 删除队列头部的元素并返回其值
-
front 返回队列头部的元素
-
clear 清空队列
-
size 队列的大小,也就是元素个数
-
isEmpty 队列是否为空
清楚了要实现的功能之后,就可以开始队列的实现了
二、队列的实现
const Queue = (function () {
const _items = new WeakMap()
return class {
constructor() {
_items.set(this, [])
}
// 新增元素
enqueue(el) {
_items.get(this).push(el)
}
// 删除队列头部的元素并返回其值
dequeue() {
return _items.get(this).shift()
}
// 返回队列头部的元素
front() {
return _items.get(this)[0]
}
// 清空队列
clear() {
_items.set(this, [])
}
// 队列的大小
size() {
return _items.get(this).length
}
// 队列是否为空
isEmpty() {
return _items.get(this).length === 0
}
}
})()
const queue = new Queue()
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
console.log(queue.size()) // 3
console.log(queue.isEmpty()) // false
queue.clear()
console.log(queue.size()) // 0
console.log(queue.isEmpty()) // true