数据结构与算法设计
一套面向 C++ 学习者的可交互课件:所有抽象概念配结构图, 所有核心算法配可单步 / 可自动播放的动态演示,所有代码均为可直接编译运行的 C++。 覆盖从「数据结构是什么」到「KMP / Dijkstra / 关键路径 / 动态规划 / 排序下界」的完整主线, 并附洛谷题单用于练习与自测。
动画配色约定(全站统一,看到颜色就知道进行到哪一步)
怎么使用这套课件
学习路线(建议按顺序)
- 先看结构图:把「数据在内存里长什么样」想清楚,比背代码重要十倍。
- 再跑动画:点「▶ 播放」看算法整体节奏,再点「◀ 上一步 / 下一步 ▶」逐帧抠细节。
- 后看代码:代码块的左上角可一键复制,务必自己敲一遍并单步调试。
- 最后做题:第 14 讲的洛谷题单按难度分层,做完再回头看讲义会有全新理解。
页面上的小功能
- 本页导航在屏幕右侧,平时不显示:鼠标移到屏幕右边缘就会自动抽出来(感应式)。 顶栏的 ☰ 按钮可以开关这个感应 —— 关掉后右侧完全不响应鼠标; 抽屉里的 钉住 能把目录固定住不自动收回,按 Esc 收起。
- 右上角 ◐ 切换深色 / 浅色主题(观看动画时深色更护眼)。
- 右上角 ⎙ 可直接把当前章节打印或导出成 PDF,折叠的答案会自动展开。
- 动画下方的「速度」滑杆可调整播放快慢,复杂算法建议调慢逐帧看。
- 键盘快捷键:← → 单步看动画, 空格 播放 / 暂停, Alt+← / → 翻到上一讲 / 下一讲。
章节总览
绪论:数据结构与算法分析
数据结构的定义、逻辑结构与物理结构、四类基本结构、专业术语体系(数据/数据元素/数据项/ADT)、 算法五特性、大 O 时间复杂度的推导与计算技巧、最好/最坏/平均复杂度、空间复杂度。
线性表:顺序表与链表
顺序表的插入删除与均摊分析、单链表 / 双向链表 / 循环链表 / 静态链表的完整 C++ 实现, 头插尾插、按位查找、删除、反转、合并、判环(快慢指针)与四者操作对比。
栈及其经典应用
顺序栈与链栈的实现、共享栈;括号匹配、进制转换、中缀转后缀与后缀表达式求值、 递归与栈的关系、单调栈入门。
队列及其应用
循环队列(三种判满方案)、链队列、双端队列;银行排队模拟、杨辉三角、 二叉树的层序基础、单调队列与滑动窗口。
串:KMP 与 BM 模式匹配
串的基本操作与朴素匹配;next 数组手推全过程、nextval 优化、KMP 匹配动画; BM 算法的坏字符 / 好后缀规则与完整实现。
数组与特殊矩阵压缩存储
多维数组的行优先 / 列优先地址计算、对称矩阵、上(下)三角矩阵、三对角矩阵、 稀疏矩阵的三元组与十字链表表示。
树与二叉树
树的术语体系、二叉树五大性质及证明、顺序与链式存储、前 / 中 / 后 / 层序四种遍历、 由遍历序列还原二叉树、线索二叉树、赫夫曼树与最优前缀编码、并查集。
图:术语与存储结构
顶点 / 边 / 度 / 路径 / 连通性等基本术语、完全图与稠密稀疏图、邻接矩阵与邻接表 (含逆邻接表、十字链表、邻接多重表)、DFS 与 BFS 遍历、连通分量与生成树。
图论算法:生成树与最短路径
Prim 与 Kruskal 最小生成树(含并查集)、Dijkstra 单源最短路、Floyd 全源最短路、 Bellman-Ford / SPFA、拓扑排序、AOE 网与关键路径。
查找与哈希表
顺序查找、折半查找(判定树与 ASL 推导)、插值查找、斐波那契查找、分块查找; 哈希函数构造方法、开放定址 / 链地址 / 再哈希 / 公共溢出区四大冲突解决方案与 ASL 计算。
八大排序算法图解(上)
冒泡、简单选择、直接插入、希尔、堆、归并、快速、基数排序——逐一配动态图讲解实现过程, 附每种的 C++ 完整模板与执行轨迹。
排序体系与下界分析(下)
插入类 / 交换类 / 选择类 / 归并类 / 基数类五大体系共 10+ 种排序(含计数、桶、锦标赛、 3 路快排、内省排序);比较排序下界 Ω(n log n) 的决策树证明、稳定性与全面对比表。
算法设计范式与动态规划
回溯法与解空间树(N 皇后、迷宫)、分治法(含主定理)、贪心与正确性、 动态规划从记忆化搜索到递推(01 背包、完全背包、LIS、LCS、区间 DP、状压 DP)、 数论 / 快速幂 / 筛法 / 高精度等数学算法。
洛谷题单:例题与作业
按章节整理的洛谷习题,每题给出难度、考点、思路提示与 C++ 参考代码框架, 另附「分阶段作业计划」供课后自测。
综合自测与速查手册
全课程复杂度速查大表、C++ STL 容器用法对照、常用算法模板库、 易错概念辨析、模拟自测题(含答案折叠)。
知识地图
阅读约定
| 记号 | 含义 |
|---|---|
n | 数据规模(元素个数 / 顶点数 / 串长) |
O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(2ⁿ) < O(n!) | 常见复杂度从小到大的增长顺序 |
| 动画 | 该处配有可单步 / 可播放的动态演示,务必动手点开 |
| 考点 | 考试与面试高频内容 |
| 易错 | 常见踩坑点,请重点核对 |