链表及链式栈、链式队列
一、指针(Pointer)
-
指针的精确定义
- 指针是存储内存地址的变量
- 通过指针可以间接访问和操作内存中的数据
- 指针类型决定了指针解引用时的解释方式
-
指针操作要点
&取地址运算符*解引用运算符- 指针算术运算(数组遍历时常用)
二、链表优化
- 链表介绍优化
(1) 线性表 vs 链表的比较
| 特性 | 顺序表(数组) | 链表 |
|---|---|---|
| 存取方式 | 随机存取 | 顺序存取 |
| 插入/删除效率 | O(n) | O(1)已知位置 |
| 空间连续性 | 连续 | 不连续 |
| 空间利用率 | 高(无额外开销) | 较低(有指针开销) |
(2) 链表类型补充
- 单链表:每个结点包含数据和指向下一结点的指针
- 双向链表:结点包含前驱和后继指针,支持双向遍历
- 循环链表:尾结点指向头结点形成环状结构
三、链式栈优化
- 实现要点
- 只需要维护一个top指针
- 不需要头结点,栈顶直接指向第一个元素
- 空栈时top为nullptr
四、链式队列优化
- 实现要点
- 维护front和rear两个指针
- 空队列时front和rear都为nullptr
- 出队时更新front,入队时更新rear
五、最佳实践建议
- 边界条件检查:始终检查空链表/栈/队列情况
- 内存管理:每次new后要有对应的delete
- 错误处理:对非法操作应有处理机制(如空栈pop)
- 代码复用:可以考虑使用模板实现通用数据结构
- 调试辅助:实现size()/isEmpty()等辅助方法
六、复杂度分析
| 操作 | 链表 | 链式栈 | 链式队列 |
|---|---|---|---|
| 插入/入栈/入队 | O(1) | O(1) | O(1) |
| 删除指定元素 | O(n) | - | - |
| 删除/出栈/出队 | O(1) | O(1) | O(1) |
| 访问指定位置 | O(n) | - | - |
| 空间开销 | O(n) | O(n) | O(n) |

浙公网安备 33010602011771号