接下来,我们将构建一个与栈互补的数据结构--队列。不同之处在于,这次从队列的开头而不是末尾删除项目。删除最旧的项目而不是最新的项目。
同样,因为这只是限制了某些功能,所以也有许多不同的实现方式。一个不错方案是使用稍后会接触的链表。
实现队列数据结构可以提供以下一些运算:
一个生成空队列的构造函数;
将元素插入队列尾部;
移除并返回队头元素;
返回队头元素;
下面我们将依次介绍其实现。
一个生成空队列的构造函数
类似的,队列使用 JavaScript 数组作为列表而不是内存。
constructor() {
this.list = [];
this.length = 0;
}
将元素插入队列尾部
与栈类似,将定义两个函数来添加和删除队列中的项目。 第一个是“入队”。
这会将值推送到列表的末尾。
enqueue(value) {
}
移除并返回队头元素
接下来是“出队”,它不是从列表末尾删除项目,而是将从队头开始删除。将第一项 shift 出列表的头部并返回其值。
dequeue() {
}
返回队头元素
与栈相同,我们将定义一个 peek 函数,用于获取下一个值而不将其从队列中删除。
peek() {
}
这里要注意的一点是,因为使用了列表来实现队列,它继承了 shift 的性能,即线性 O(N) “还行”。
稍后我们将接触到可以实现更快队列的链表。
运行