第1篇 基础知识篇 2
第1章 基础数据结构(教学视频:26分钟) 2
1.1 顺序表 2
1.1.1 顺序表的定义 2
1.1.2 顺序表的基本操作 3
1.1.3 实例应用与分析 6
1.2 链表 8
1.2.1 链表的定义 8
1.2.2 链表基本操作 10
1.2.3 双向链表 13
1.2.4 循环链表 17
1.2.5 实例应用与分析 20
1.3 栈 25
1.3.1 栈的定义 25
1.3.2 栈的基本操作 26
1.3.3 实例应用与分析 26
1.4 队列 30
1.4.1 队列的定义 30
1.4.2 队列的基本操作 31
1.4.3 实例应用与分析 31
1.5 散列表 36
1.5.1 散列表的定义 36
1.5.2 散列函数 36
1.5.3 基于散列的查找 37
1.5.4 实例应用与分析 39
第2章 树结构(教学视频:43分钟) 43
2.1 树结构简介 43
2.1.1 树的定义 43
2.1.2 树的逻辑表示 44
2.1.3 基本术语 44
2.1.4 树的性质 45
2.1.5 树的基本操作 45
2.1.6 树与森林 46
2.1.7 实例应用与分析 47
2.2 二叉树 49
2.2.1 二叉树的定义 50
2.2.2 二叉树的性质 51
2.2.3 二叉树的存储结构 51
2.2.4 二叉树的基本操作 54
2.2.5 实例应用与分析 64
2.3 线索二叉树 66
2.3.1 线索二叉树的定义 66
2.3.2 线索二叉树的基本操作 67
2.4 二叉查找树 70
2.4.1 二叉查找树的定义 70
2.4.2 二叉查找树的基本操作 71
2.4.3 实例应用与分析 74
2.5 红黑树 78
2.5.1 红黑树的定义 78
2.5.2 红黑树的基本操作 79
2.6 B树 89
2.6.1 B树的定义 89
2.6.2 B树的基本操作 91
第3章 图结构(教学视频:34分钟) 93
3.1 图结构简介 93
3.2 图的存储结构 94
3.2.1 邻接矩阵存储 94
3.2.2 邻接表存储 96
3.3 图的基本操作和图的遍历 97
3.3.1 图的基本操作 97
3.3.2 深度优先遍历 100
3.3.3 广度优先遍历 101
3.3.4 实例应用与分析 102
第2篇 基础算法篇 106
第4章 算法入门(教学视频:30分钟) 106
4.1 什么是算法 106
4.2 算法的数学基础 106
4.2.1 算法分析 106
4.2.2 函数增长率 108
4.3 基本算法思想 108
4.3.1 分治法 108
4.3.2 递归式 109
4.3.3 回溯法 110
4.3.4 穷举法 110
4.3.5 随机算法 111
4.4 基础算法应用实例 111
第5章 排序算法(教学视频:49分钟) 128
5.1 插入排序 128
5.1.1 算法描述 128
5.1.2 算法实现 129
5.1.3 应用实例与分析 131
5.2 冒泡排序 132
5.2.1 算法描述 132
5.2.2 算法实现 133
5.2.3 应用实例与分析 134
5.3 快速排序 136
5.3.1 算法描述 136
5.3.2 算法实现 137
5.3.3 应用实例与分析 139
5.4 归并排序 141
5.4.1 算法描述 141
5.4.2 算法实现 143
5.4.3 应用实例与分析 145
5.5 希尔排序 146
5.5.1 算法描述 146
5.5.2 算法实现 147
5.5.3 应用实例与分析 148
5.6 选择排序 149
5.6.1 算法描述 149
5.6.2 算法实现 150
5.6.3 应用实例与分析 151
5.7 堆排序 152
5.7.1 堆 152
5.7.2 堆排序算法描述 153
5.7.3 算法实现 154
5.7.4 应用实例与分析 155
5.8 计数排序 158
5.8.1 算法描述 158
5.8.2 算法实现 159
5.8.3 应用实例与分析 160
5.9 基数排序 162
5.9.1 算法描述 162
5.9.2 算法实现 163
5.9.3 应用实例与分析 165
5.10 桶排序 166
5.10.1 算法描述 166
5.10.2 算法实现 168
5.10.3 应用实例与分析 169
5.11 排序算法的比较和选择 172
5.11.1 排序算法的性能比较 172
5.11.2 排序算法的选择标准 172
第6章 查找算法(教学视频:22分钟) 174
6.1 顺序查找 174
6.1.1 算法描述 174
6.1.2 算法实现 174
6.1.3 应用实例与分析 175
6.2 二分查找 176
6.2.1 算法描述 176
6.2.2 算法实现 176
6.2.3 实例应用与分析 177
6.3 二叉查找树 178
6.3.1 二叉查找树的定义 178
6.3.2 二叉查找树的基本操作回顾 180
6.3.3 实例应用与分析 183
6.4 分块查找 185
6.4.1 算法描述 185
6.4.2 算法实现 186
6.5 B树查找算法 187
6.5.1 算法描述 187
6.5.2 算法实现 188
6.5.3 扩展——B+树简介 188
6.6 哈希查找 189
6.6.1 算法描述 189
6.6.2 算法实现 190
6.6.3 实例应用及分析 192
第3篇 高级算法篇 196
第7章 高级图算法(教学视频:30分钟) 196
7.1 拓扑排序 196
7.1.1 算法描述 196
7.1.2 算法实现 197
7.1.3 实例分析与应用 201
7.2 最小生成树 205
7.2.1 算法描述 206
7.2.2 算法实现 206
7.3 单源最短路径 215
7.3.1 算法描述 215
7.3.2 算法实现 217
7.3.3 应用实例与分析 220
7.4 每对顶点间的最短路径 222
7.4.1 算法描述 222
7.4.2 算法实现 223
7.4.3 应用实例与分析 225
7.5 网络流 225
7.5.1 流网络 225
7.5.2 Ford-Fulkerson算法描述 227
7.5.3 Ford-Fulkerson算法的实现 230
第8章 动态规划(教学视频:17分钟) 232
8.1 动态规划基础 232
8.1.1 动态规划思想引例 233
8.1.2 动态规划理论基础 236
8.2 动态规划应用实例分析 237
8.2.1 矩阵链乘法问题 237
8.2.2 最长公共子序列问题 240
8.2.3 背包问题 242
8.2.4 求三角形最佳路径问题 246
8.2.5 计算划分方案种类数问题 247
8.2.6 设计竞赛题目问题 248
8.2.7 双人游戏策略问题 249
8.2.8 音乐CD最大曲目数问题 250
8.2.9 求Jerry最快到达的时间问题 251
8.2.10 陪审团人选问题 254
第9章 贪心算法(教学视频:21分钟) 257
9.1 贪心算法概述 257
9.1.1 算法描述 257
9.1.2 算法原理 263
9.2 应用实例与分析 264
9.2.1 活动选择问题 264
9.2.2 任务调度问题 268
9.2.3 闭区间不相交 269
9.2.4 会场安排问题 270
9.2.5 贪心算法在求最小生成树的应用 272
第10章 综合趣味算法(教学视频:34分钟) 281
10.1 矩阵运算 281
10.1.1 矩阵的性质 281
10.1.2 Strassen算法求矩阵乘积 285
10.2 字符串算法 289
10.2.1 朴素字符串匹配算法 289
10.2.2 Rabin-Karp算法 290
10.3 数论有关的基本算法 292
10.3.1 基本数论概念 292
10.3.2 求解最大公约数 293
10.3.3 寻找素数 294
10.3.4 整数的因子分解 297
第4篇 算法实战篇 304
第11章 数学趣题解决方法(教学视频:23分钟) 304
11.1 求两个数的最大公约数和最小公倍数 304
11.2 魔幻方阵的解法 305
11.3 广场该建多大 309
11.4 水仙花数 312
11.5 通向女友之路 313
11.6 八皇后问题 316
11.7 洗扑克问题 320
11.8 约瑟夫问题 321
11.9 格雷码 325
11.10 老鼠走迷宫 326
11.11 骑士走棋盘 329
11.12 三色球 331
11.13 汉诺塔问题 333
11.14 细胞的游戏 335
11.15 超长整数加法 339
11.16 阿姆斯壮数 342
11.17 筛选求素数 343
11.18 验证角谷猜想 344
11.19 找出说谎人 345
11.20 超级病毒 347
11.21 数字的分解 349
11.22 寻找完美数 350
11.23 二维矩阵转一维矩阵 353
11.24 求解低阶定积分 354
11.25 迭代法开平方运算 357
11.26 牛顿法解方程 358
11.27 求解微分方程 360
11.28 求解线性方程组 361
11.29 梯形法求解定积分 363
第12章 面试算法题精粹(教学视频:24分钟) 365
12.1 常见基础题精粹 365
12.2 常见算法编程题精粹 372
12.2.1 遍历一次求取单链表的中间点 372
12.2.2 实现单链表的排序 376
12.2.3 判断两棵树是否相等 378
12.2.4 寻找重复率最高的短信 378
12.2.5 实现strcpy()函数 382
12.2.6 字符串常见试题 383
12.2.7 实现循环移动 386
12.3 面试进阶问题 389
12.3.1 寻找变位词集合 389
12.3.2 咖啡罐问题 392
12.3.3 判断两个链表是否相交 395
12.3.4 寻找最大的“N”个数 396
12.3.5 蜗牛爬杆问题 398
12.3.6 判断单链表里是否有环 399
12.3.7 代码括弧的校验 399
12.3.8 查找数组中的最大值和最小值 401