Queue
队列(FIFO)数据结构,先进先出。
函数签名
typescript
function createQueue<T>(): Queue<T>
interface Queue<T> {
enqueue(item: T): void
dequeue(): T | undefined
peek(): T | undefined
size(): number
isEmpty(): boolean
clear(): void
toArray(): T[]
}API 说明
enqueue(item: T): void
在队列尾部添加元素。
参数:
item: 要添加的元素
时间复杂度:O(1)
dequeue(): T | undefined
移除并返回队列头部的元素。
返回值:
- 队列头部的元素,如果队列为空则返回
undefined
时间复杂度:O(n)(使用 shift 方法)
peek(): T | undefined
查看队列头部的元素,但不移除。
返回值:
- 队列头部的元素,如果队列为空则返回
undefined
时间复杂度:O(1)
size(): number
获取队列中元素的数量。
返回值:
- 队列中元素的数量
时间复杂度:O(1)
isEmpty(): boolean
检查队列是否为空。
返回值:
- 如果队列为空则返回
true,否则返回false
时间复杂度:O(1)
clear(): void
清空队列中的所有元素。
时间复杂度:O(1)
toArray(): T[]
返回队列中所有元素的数组副本(从队首到队尾)。
返回值:
- 包含所有元素的数组
时间复杂度:O(n)
使用示例
typescript
import { createQueue } from '@shared/functions/data-structures/Queue'
// 创建队列
const queue = createQueue<number>()
// 入队操作
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
// 查看队首
console.log(queue.peek()) // 1
// 出队操作
console.log(queue.dequeue()) // 1
console.log(queue.dequeue()) // 2
// 获取队列大小
console.log(queue.size()) // 1
// 检查是否为空
console.log(queue.isEmpty()) // false
// 转换为数组
console.log(queue.toArray()) // [3]
// 清空队列
queue.clear()
console.log(queue.isEmpty()) // true工作原理
队列是一种先进先出(FIFO)的数据结构,类似于现实中的排队场景:
- 新元素总是添加到队尾(enqueue)
- 移除操作总是从队首开始(dequeue)
- 先加入的元素先被移除
本实现使用数组作为底层数据结构:
enqueue使用push添加到数组末尾 - O(1)dequeue使用shift从数组开头移除 - O(n)
应用场景
- 任务调度:按顺序处理任务
- 广度优先搜索(BFS):图的遍历算法
- 消息队列:异步消息处理
- 打印队列:按顺序打印文档
- 缓冲区管理:数据流处理
性能优化建议
如果需要频繁的出队操作,可以考虑使用循环队列或链表实现来提高性能。当前实现的 dequeue 操作为 O(n),因为使用了数组的 shift 方法。