一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情。
队列的定义
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。 ——百度百科
简单来说,队列是遵循先进先出(FIFO,First In First Out)原则的一组有序集合。生活中买票排队就是很常见的队列。
创建一个队列
class Queue {
constructor(){
//由于js数组的特性,先来实现数组版本的
this.items = []
}
}
队列中的方法
- push() 向队尾添加一个或多个元素
- pop() 移除队头元素
- top() 返回队头,不改变队列
- isNull() 是否为空队列
- clear() 清空队列
- size() 返回队列的元素个数
push
push(...data){
this.items.push(...data)
}
pop
pop(){
return this.items.shift()
}
top
top(){
return this.items[0]
}
isNull
isNull(){
return this.items.length === 0
}
clear
clear(){
this.items = []
}
size
size(){
return this.items.length
}
完整代码如下:
class Queue {
constructor(){
this.items = []
}
push(...data){
this.items.push(...data)
}
pop(){
return this.items.shift()
}
top(){
return this.items[0]
}
isNull(){
return this.items.length === 0
}
clear(){
this.items = []
}
size(){
return this.items.length
}
}
const queue = new Queue()
console.log(queue.isNull()); //true
queue.push(1)
queue.push(2)
queue.push(3,4,5)
console.log(queue.size()); //5
console.log(queue.top()); //1
console.log(queue.pop()); //1
console.log(queue.top()); //2
console.log(queue.size()); //4
console.log(queue.isNull()); //false
queue.clear()
console.log(queue.isNull()); //true
console.log(queue.size()); //0
总结
本章我们实现了一个基于数组的简单的队列类,由于是基于数组,所以,他也有和基于数组实现的栈类相同的缺点(消耗更多的内存空间;数据量过大耗时更久)。下章我们会进行优化,基于对象实现。感兴趣的伙伴可自行实现,并可以想想循环队列与双端队列应该如何实现。