2025-4-2-链式队列
四月 02, 2025
1. 什么是链式队列?
链式队列是用 链表(Linked List) 实现的队列,符合 先进先出(FIFO) 的规则。就像现实中的排队:
- 入队(Enqueue):新人排到队尾。
- 出队(Dequeue):队头的人先离开。
链式队列 vs 数组队列
| 对比项 | 链式队列 | 数组队列 | | ———— | ———————- | ————— | | 存储方式 | 动态分配(不连续内存) | 连续内存 | | 扩容 | 灵活(无容量限制) | 需手动扩容/缩容 | | 适用场景 | 频繁增删 | 随机访问 |
2. 链式队列的实现步骤
我们用py代码实现
先定义节点
1 | class Node: |
再定义队列
1 | def enqueue(self,data): |
出队的实现
1 | def dequeue(self): |
检查队头是不是空的
1 | def is_empty(self): |
4. 时间复杂度分析
| 操作 | 时间复杂度 | 说明 |
| ———– | ———- | ——————— |
| Enqueue | O(1) | 直接修改队尾指针 |
| Dequeue | O(1) | 直接修改队头指针 |
| IsEmpty | O(1) | 检查 front
是否为空 |
5. 常见问题
Q1: 链式队列会溢出吗?
不会!因为链表动态分配内存,除非系统内存耗尽。
Q2: 如何遍历链式队列?
从 front
开始,沿着 next
指针逐个访问:
1 | current = queue.frontwhile current: print(current.data) current = current.next |
Q3: 链式队列 vs 循环队列?
- 链式队列:无容量限制,但每次操作需动态分配内存。
- 循环队列:固定容量,适合已知最大长度的场景(如操作系统任务调度)。
6. 实际应用场景
- 消息队列:RabbitMQ、Kafka 的底层实现之一。
- CPU 任务调度:操作系统中的就绪队列。
- 广度优先搜索(BFS):图的遍历算法。
总结
- 链式队列 = 链表 + 队头队尾指针。
- 核心操作:
enqueue
(队尾插入)、dequeue
(队头删除)。 - 优点:动态扩容、无需处理固定容量问题。
查看评论