Skip to content

数据结构


专题说明

本专题已经重组为一套从零起步、逐步递进的数据结构课程。章节顺序不再按“知识点堆叠”展开,而是按照“抽象模型 -> 线性结构 -> 树与图 -> 查找与排序 -> 工程实践”的主线推进。

学习定位

数据结构是程序设计与算法分析之间的桥梁课程。它研究的不是“容器名字的集合”,而是三个更根本的问题:数据之间是什么关系、这些关系如何映射到内存、不同操作为什么会呈现不同的复杂度。数组为什么访问快、链表为什么插入灵活、堆为什么适合优先队列、哈希表为什么平均查找快、图为什么能表达复杂连接关系,这些都属于数据结构的核心议题。

本专题的写法不是应试提纲,而是课程讲义。每章都会尽量同时覆盖四个层面:

  1. 理论定义与核心不变量。
  2. 图示和内存视角。
  3. Go 代码实现与边界条件。
  4. 复杂度、适用场景与工程权衡。

章节导航

  1. 第一章 抽象、复杂度与内存模型

未登录状态下默认开放第一章,其余章节登录后可继续学习。

  1. 第二章 数组、切片与链表
  2. 第三章 栈、队列、双端队列与递归
  3. 第四章 树、二叉搜索树与堆
  4. 第五章 哈希表、集合与并查集
  5. 第六章 图、遍历与最短路径
  6. 第七章 查找、排序与选择问题
  7. 常见排序算法图解
  8. 十大经典排序算法对比
  9. 第八章 数据结构比较与工程实践

进阶篇

  1. 树结构进阶:AVL、红黑树与多路平衡树
  2. 哈希进阶:开放定址、扩容策略与工程实现
  3. 图结构进阶:最小生成树、拓扑应用与更高阶建模

学习建议

先把模型建起来,再背术语

建议先通读第一章到第三章,先建立“抽象数据类型、内存布局、基本操作、复杂度”这一主线,再进入树、图和哈希。若一开始就试图机械记忆术语,很容易形成碎片化理解,最后只会背定义,不会解释原因。

用 Go 代码验证抽象概念

阅读定义时,要立刻思考它在 Go 里如何表示:数组和切片如何共享底层内存,链表节点怎样连接,队列如何避免头部搬移,树节点如何递归定义,图如何用邻接表表达。只有把抽象概念落实到代码表示上,才能真正掌握。

不只问“会不会写”,还要问“为什么这样写”

每学完一种结构,都应回答四个问题:

  1. 它维护了什么不变量。
  2. 它的核心操作为什么是这个复杂度。
  3. 它最容易出错的边界条件是什么。
  4. 它和上一章结构相比,换来的收益和代价分别是什么。

长期坚持这种“结构 + 代码 + 复杂度 + 比较”的学习方式,数据结构知识就会逐步形成体系。

核心课学完,再进进阶篇

建议先把前 8 章学扎实,再进入进阶篇。AVL、红黑树、最小生成树、拓扑动态规划这些内容,虽然仍属于数据结构课程主线,但它们默认你已经真正理解了树高、旋转、堆、并查集、BFS/DFS、复杂度比较这些基础概念。