前言
上篇学习了栈,紧接着看这篇队列。
一. 队列
队列(Queue)是一种常见的线性数据结构,具有先进先出(FIFO,First-In-First-Out)的特性。在队列中,新元素被添加到队尾,而旧元素则从队首被移除。
类比现实生活中排队的场景,队列的操作如下:
- 入队(Enqueue):将元素添加到队列的末尾。
- 出队(Dequeue):从队列的头部移除并返回元素。
- 队首(Front):返回队列的第一个元素,但不对队列做修改。
- 队尾(Rear):返回队列的最后一个元素,但不对队列做修改。
- 队列大小(Size):返回队列中元素的数量。
- 队列是否为空(IsEmpty):检查队列是否为空。
队列的操作遵循先进先出的原则,即最先入队的元素最先出队,保持了元素顺序的一致性。队列在计算机科学中有广泛的应用,例如任务调度、消息传递、广度优先搜索等场景。
既然我提到了广度优先搜索,大家有没有因此想到
vue源码中Vue.js 的组件渲染和更新过程中的依赖收集和派发更新?Vue.js 使用响应式系统来追踪组件的依赖关系,当响应式数据发生变化时,需要通知相关的组件进行更新。在这个过程中,Vue.js 会使用
广度优先搜索的思想来遍历组件的依赖关系图,并建立一个更新队列。它会先更新父级组件,然后再更新子级组件,以确保更新的顺序是从上到下、从父级到子级的。通过广度优先搜索的方式,Vue.js 可以保证父级组件在子级组件之前进行更新,以确保组件的更新顺序是正确的,避免出现不一致或错误的渲染结果。
需要注意的是,这里提到的广度优先搜索是在组件更新过程中用于确定更新顺序的一种思想。
- enqueue(item):将元素item插入队列的队尾。
- dequeue():删除并返回队列的队头元素。
- isEmpty():检查队列是否为空。
- size():返回队列中元素的个数。
- front():返回队列的队头元素,但不删除。
二. 队列的实现
class ArraryQueue<T> {
private data: T[] = [];
enqueue(el: T): void {
this.data.push(el);
}
dequeue(): T | undefined {
return this.data.shift();
}
peek(): T | undefined {
return this.data[0];
}
isEmpty(): boolean {
return this.data.length === 0;
}
size(): number {
return this.data.length;
}
}
export default ArraryQueue;