三、队列的链式实现
链式队列通过链表存储元素,分为带头结点和不带头结点两种实现方式,可灵活应对动态元素数量场景。 链式队列本质上是一个同时带有 队头指针 (front) 和 队尾指针 (rear) 的单链表。
核心考点:带头结点 vs 不带头结点
在考试和实际编程中,区分这两种实现方式非常重要。
- 带头结点:引入一个不存数据的 dummy node,简化了空队列和非空队列的操作统一性。
- 不带头结点:更节省空间,但代码逻辑需要处理
NULL的边界情况。
动态对比演示
H
Front ▼
▲ Rear
1. 带头结点的链式队列
带头结点的链式队列会额外创建一个头结点,避免插入第一个元素时的指针特殊处理。
(1)核心操作逻辑
- 初始化:
front和rear均指向头结点,头结点next为NULL - 入队:新结点插入到
rear之后,更新rear指针 - 出队:删除头结点的后继结点,若删除的是最后一个元素,需同步更新
rear指针
(2)完整实现代码
Output:
Click "Run" to see output...
2. 不带头结点的链式队列
不带头结点的链式队列无额外头结点,插入第一个元素时需同时修改front和rear指针。
(1)核心操作逻辑
- 初始化:
front和rear均为NULL - 入队:若队列为空,
front和rear均指向新结点;否则插入到rear之后 - 出队:若删除最后一个元素,需将
front和rear重置为NULL
(2)完整实现代码
Output:
Click "Run" to see output...