数据结构与算法设计

一套面向 C++ 学习者的可交互课件:所有抽象概念配结构图, 所有核心算法配可单步 / 可自动播放的动态演示,所有代码均为可直接编译运行的 C++。 覆盖从「数据结构是什么」到「KMP / Dijkstra / 关键路径 / 动态规划 / 排序下界」的完整主线, 并附洛谷题单用于练习与自测。

15讲 · 32.1 万字讲义
81个可单步交互动画
182张结构图解
271段 C++ 代码

动画配色约定(全站统一,看到颜色就知道进行到哪一步)

蓝色:当前正在处理的位置(指针 / 当前结点) 橙色:正在进行比较的元素 绿色:已完成、已就位、已确定的元素 红色:冲突、失配或发生交换的位置 灰色/淡出:已被排除、不再参与的部分

怎么使用这套课件

学习路线(建议按顺序)

  1. 先看结构图:把「数据在内存里长什么样」想清楚,比背代码重要十倍。
  2. 再跑动画:点「▶ 播放」看算法整体节奏,再点「◀ 上一步 / 下一步 ▶」逐帧抠细节。
  3. 后看代码:代码块的左上角可一键复制,务必自己敲一遍并单步调试。
  4. 最后做题:第 14 讲的洛谷题单按难度分层,做完再回头看讲义会有全新理解。

页面上的小功能

  • 本页导航在屏幕右侧,平时不显示:鼠标移到屏幕右边缘就会自动抽出来(感应式)。 顶栏的 按钮可以开关这个感应 —— 关掉后右侧完全不响应鼠标; 抽屉里的 钉住 能把目录固定住不自动收回,按 Esc 收起。
  • 右上角 切换深色 / 浅色主题(观看动画时深色更护眼)。
  • 右上角 可直接把当前章节打印或导出成 PDF,折叠的答案会自动展开。
  • 动画下方的「速度」滑杆可调整播放快慢,复杂算法建议调慢逐帧看。
  • 键盘快捷键 单步看动画, 空格 播放 / 暂停, Alt+← / → 翻到上一讲 / 下一讲。

章节总览

01

绪论:数据结构与算法分析

数据结构的定义、逻辑结构与物理结构、四类基本结构、专业术语体系(数据/数据元素/数据项/ADT)、 算法五特性、大 O 时间复杂度的推导与计算技巧、最好/最坏/平均复杂度、空间复杂度。

大O计算术语表复杂度图表
02

线性表:顺序表与链表

顺序表的插入删除与均摊分析、单链表 / 双向链表 / 循环链表 / 静态链表的完整 C++ 实现, 头插尾插、按位查找、删除、反转、合并、判环(快慢指针)与四者操作对比。

内存布局指针动画对比表
03

栈及其经典应用

顺序栈与链栈的实现、共享栈;括号匹配、进制转换、中缀转后缀与后缀表达式求值、 递归与栈的关系、单调栈入门。

表达式求值动画括号匹配
04

队列及其应用

循环队列(三种判满方案)、链队列、双端队列;银行排队模拟、杨辉三角、 二叉树的层序基础、单调队列与滑动窗口。

循环队列动画排队模拟
05

串:KMP 与 BM 模式匹配

串的基本操作与朴素匹配;next 数组手推全过程、nextval 优化、KMP 匹配动画; BM 算法的坏字符 / 好后缀规则与完整实现。

KMP 逐帧动画next 推导BM
06

数组与特殊矩阵压缩存储

多维数组的行优先 / 列优先地址计算、对称矩阵、上(下)三角矩阵、三对角矩阵、 稀疏矩阵的三元组与十字链表表示。

地址公式下标映射动画
07

树与二叉树

树的术语体系、二叉树五大性质及证明、顺序与链式存储、前 / 中 / 后 / 层序四种遍历、 由遍历序列还原二叉树、线索二叉树、赫夫曼树与最优前缀编码、并查集。

四种遍历动画赫夫曼编码
08

图:术语与存储结构

顶点 / 边 / 度 / 路径 / 连通性等基本术语、完全图与稠密稀疏图、邻接矩阵与邻接表 (含逆邻接表、十字链表、邻接多重表)、DFS 与 BFS 遍历、连通分量与生成树。

DFS/BFS 动画存储对比
09

图论算法:生成树与最短路径

Prim 与 Kruskal 最小生成树(含并查集)、Dijkstra 单源最短路、Floyd 全源最短路、 Bellman-Ford / SPFA、拓扑排序、AOE 网与关键路径。

Prim/KruskalDijkstra关键路径
10

查找与哈希表

顺序查找、折半查找(判定树与 ASL 推导)、插值查找、斐波那契查找、分块查找; 哈希函数构造方法、开放定址 / 链地址 / 再哈希 / 公共溢出区四大冲突解决方案与 ASL 计算。

折半查找动画哈希冲突演示
11

八大排序算法图解(上)

冒泡、简单选择、直接插入、希尔、堆、归并、快速、基数排序——逐一配动态图讲解实现过程, 附每种的 C++ 完整模板与执行轨迹。

8 个排序动画轨迹对照
12

排序体系与下界分析(下)

插入类 / 交换类 / 选择类 / 归并类 / 基数类五大体系共 10+ 种排序(含计数、桶、锦标赛、 3 路快排、内省排序);比较排序下界 Ω(n log n) 的决策树证明、稳定性与全面对比表。

下界证明大对比表
13

算法设计范式与动态规划

回溯法与解空间树(N 皇后、迷宫)、分治法(含主定理)、贪心与正确性、 动态规划从记忆化搜索到递推(01 背包、完全背包、LIS、LCS、区间 DP、状压 DP)、 数论 / 快速幂 / 筛法 / 高精度等数学算法。

N 皇后动画背包填表动画DP 分类
14

洛谷题单:例题与作业

按章节整理的洛谷习题,每题给出难度、考点、思路提示与 C++ 参考代码框架, 另附「分阶段作业计划」供课后自测。

题单作业计划
15

综合自测与速查手册

全课程复杂度速查大表、C++ STL 容器用法对照、常用算法模板库、 易错概念辨析、模拟自测题(含答案折叠)。

速查表模拟自测

知识地图

数据结构与算法设计 线性结构 树形结构 图形结构 查找与排序 顺序表 链表 队列 / 串 二叉树 赫夫曼树 遍历 并查集 邻接矩阵 邻接表 DFS / BFS 最短路 生成树 拓扑排序 · 关键路径 哈希表 四大查找法 10+ 排序 下界 Ω(nlogn) 算法设计范式 分治 · 贪心 · 回溯与解空间树 · 动态规划(背包 / LIS / LCS / 区间 / 状压)· 数学算法(快速幂 / 筛法 / 高精度)
图 0-1 课程知识地图:数据结构(存)与算法(算)两条腿,最后汇聚到算法设计范式

阅读约定

记号含义
n数据规模(元素个数 / 顶点数 / 串长)
O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(2ⁿ) < O(n!)常见复杂度从小到大的增长顺序
动画该处配有可单步 / 可播放的动态演示,务必动手点开
考点考试与面试高频内容
易错常见踩坑点,请重点核对
给学习者的一句话 数据结构不是「背下来的画」,而是「想清楚的过程」。每学一个结构,先问三个问题: 它在内存里怎么排?基本操作要动几个指针 / 挪几个元素?这些操作各自是什么复杂度? 把这三问答顺了,代码自然就写出来了。