第1章 绪论 1
1.1 软件的基本概念 1
1.1.1 软件应用 1
1.1.2 软件生存期 2
1.1.3 软件技术 3
1.1.4 程序设计技术 5
1.2 数据结构概述 8
1.2.1 数据结构的引入 8
1.2.2 数据结构的基本概念 10
1.2.3 数据结构与程序设计 14
1.3 算法与算法分析 16
1.3.1 算法的概念 16
1.3.2 算法分析 16
1.4 程序设计的关键技术 18
1.4.1 程序结构设计 19
1.4.2 模块设计 24
1.4.3 良好的编程风格 24
1.4.4 排错与测试 31
1.4.5 程序性能 39
1.5 程序设计的步骤及实例 40
1.5.1 程序设计的步骤 40
1.5.2 程序设计实例 42
习题 65
第2章 线性表 66
2.1 线性表的基本概念及运算 66
2.2 顺序表 68
2.2.1 顺序表的基本运算 69
2.2.2 顺序表的应用实例——学生学籍档案管理 73
2.3 链表 76
2.3.1 单链表 76
2.3.2 单链表的基本运算 78
2.3.3 循环链表 84
2.3.4 双向链表 86
2.3.5 链表应用实例——多项式的表示及运算 88
习题 92
第3章 栈和队列 95
3.1 栈 95
3.1.1 栈的顺序存储表示——顺序栈 96
3.1.2 栈的链式存储表示——链栈 99
3.1.3 栈的应用 100
3.2 队列 106
3.2.1 队列的存储结构 107
3.2.2 队列的应用 112
习题 118
第4章 串和数组 120
4.1 串及其运算 120
4.2 串的存储结构 123
4.3 串运算的实现 126
4.3.1 基本运算的实现 127
4.3.2 改进的模式匹配算法 130
4.4 数组的定义和运算 133
4.5 数组的顺序存储结构 135
4.6 矩阵的压缩存储 136
4.6.1 特殊矩阵 136
4.6.2 稀疏矩阵 138
习题 140
第5章 树 142
5.1 树的基本概念 142
5.2 二叉树 143
5.3 二叉树的存储结构 147
5.3.1 顺序存储结构 147
5.3.2 链式存储结构 149
5.3.3 二叉树的建立 149
5.4 二叉树的遍历 151
5.4.1 二叉树的深度优先遍历 151
5.4.2 二叉树的广度优先遍历 153
5.4.3 深度优先遍历的非递归算法 154
5.4.4 从遍历序列恢复二叉树 155
5.4.5 遍历算法的应用 157
5.5 树和森林 159
5.5.1 树的存储结构 159
5.5.2 树、森林和二叉树之间的转换 161
5.6 线索二叉树 162
5.6.1 线索二叉树的建立 162
5.6.2 访问线索二叉树 164
5.7 二叉树的应用 167
5.7.1 哈夫曼树及其应用 167
5.7.2 二叉排序树 174
习题 179
第6章 图 182
6.1 图的基本概念 182
6.2 图的存储方法 185
6.2.1 邻接矩阵 185
6.2.2 邻接表 187
6.3 图的遍历 189
6.3.1 深度优先搜索遍历 189
6.3.2 广度优先搜索遍历 191
6.4 生成树和最小生成树 193
6.5 最短路径 200
6.5.1 从某个源点到其余各顶点的最短路径 200
6.5.2 每一对顶点之间的最短路径 203
6.6 拓扑排序 206
6.7 关键路径 211
习题 216
第7章 索引结构与散列技术 218
7.1 索引结构 218
7.1.1 线性索引 218
7.1.2 倒排表 220
7.2 散列技术 221
7.2.1 散列表的概念 221
7.2.2 散列函数的构造 223
7.2.3 解决冲突的几种方法 225
7.2.4 散列表的查找及分析 228
习题 231
第8章 缩小规模算法 233
8.1 分治与递归算法 233
8.1.1 递归算法设计 233
8.1.2 分治算法设计 235
8.2 动态规划 242
8.2.1 动态规划算法的基本要素 246
8.2.2 动态规划应用之图像压缩 249
8.2.3 动态规划应用之最优二叉搜索树 251
8.3 贪心算法 254
8.3.1 贪心算法与动态规划算法的差异 255
8.3.2 贪心算法应用之哈夫曼编码 257
8.3.3 贪心算法应用之单源最短路径 259
习题 260
第9章 搜索算法 263
9.1 回溯法 263
9.1.1 回溯法的算法框架 263
9.1.2 最大团问题 267
9.1.3 图的m着色问题 269
9.1.4 旅行售货员问题 270
9.2 分支界限法 272
9.2.1 分支界限法的基本思想 272
9.2.2 装载问题 273
9.2.3 布线问题 278
习题 282
第10 章“难”问题求解算法 284
10.1 概率算法 284
10.1.1 数值概率算法 285
10.1.2 舍伍德算法 286
10.1.3 拉斯维加斯算法 288
10.1.4 蒙特卡罗算法 289
10.2 近似算法 291
10.2.1 顶点覆盖问题的近似算法 291
10.2.2 旅行售货员问题的近似算法 292
10.2.3 集合覆盖问题的近似算法 294
习题 295
参考文献 296