第1章 绪论 1
1.1 常用术语 1
1.2 算法描述 11
1.3 算法评价 13
1.4 与算法描述有关的C++知识 19
1.4.1 包含文件语句 20
1.4.2 数据类型 28
1.4.3 函数 36
1.4.4 运算符重载 41
习题1 43
第2章 线性表 48
2.1 线性表的定义和抽象数据类型 48
2.1.1 线性表的定义 48
2.1.2 线性表的抽象数据类型 49
2.1.3 操作举例 50
2.2 线性表的顺序存储和操作实现 51
2.2.1 线性表的顺序存储结构 51
2.2.2 顺序存储下的线性表操作的实现 53
2.3 线性表应用举例 62
2.4 线性表的链接存储结构 67
2.5 线性表操作在单链表上的实现 75
2.6.1 多项式表示与求值 83
2.6 多项式计算 83
2.6.2 两个多项式相加 88
习题2 91
第3章 集合、稀疏矩阵和广义表 94
3.1 集合的定义和抽象数据类型 94
3.1.1 集合定义 94
3.1.2 集合的抽象数据类型 94
3.2 集合的顺序存储结构和操作实现 95
3.3 集合的链接存储结构和操作实现 102
3.4.1 稀疏矩阵的定义 108
3.4 稀疏矩阵 108
3.4.2 稀疏矩阵的存储结构 110
3.4.3 稀疏矩阵的运算 113
3.5 广义表 120
3.5.1 广义表的定义 120
3.5.2 广义表的存储结构 122
3.5.3 广义表的运算 123
3.5.4 简单程序举例 127
习题3 128
4.1.2 栈的抽象数据类型 131
4.1.1 栈的定义 131
第4章 栈和队列 131
4.1 栈 131
4.2 栈的顺序存储结构和操作实现 132
4.3 栈的链接存储结构和操作实现 136
4.4 栈的简单应用举例 138
4.5 算术表达式的计算 142
4.5.1 算术表达式的两种表示 142
4.5.2 后缀表达式求值的算法 144
4.5.3 把中缀表达式转换为后缀表达式的算法 146
4.6 栈与递归 150
4.7.1 队列的定义 160
4.7 队列 160
4.7.2 队列的抽象数据类型 161
4.7.3 队列的顺序存储结构和操作实现 162
4.7.4 队列的链接存储结构和操作实现 165
4.8 队列应用举例 169
习题4 173
第5章 树 178
5.1 树的概念 178
5.1.1 树的定义 178
5.1.2 树的表示 180
5.1.3 树的基本术语 181
5.1.4 树的性质 182
5.2 二叉树 183
5.2.1 二叉树的定义 183
5.2.2 二叉树的性质 184
5.2.3 二叉树的抽象数据类型 186
5.2.4 二叉树的存储结构 187
5.3 二叉树遍历 189
5.4 二叉树其他运算 193
5.5.1 树的抽象数据类型 198
5.5 树的存储结构和运算 198
5.5.2 树的存储结构 199
5.5.3 树的运算 201
习题5 207
第6章 特殊二叉树 212
6.1 二叉搜索树 212
6.1.1 二叉搜索树的定义 212
6.1.2 二叉搜索树的抽象数据类型 212
6.1.3 二叉搜索树的运算 213
6.2.1 堆的定义 220
6.2 堆 220
6.2.2 堆的抽象数据类型 221
6.2.3 堆的存储结构 221
6.2.4 堆的运算 222
6.3 哈夫曼树 227
6.3.1 基本术语 227
6.3.2 构造哈夫曼树 228
6.3.3 哈夫曼编码 231
6.4 线索二叉树 234
6.4.1 二叉树的线索化 234
6.4.2 利用线索进行遍历 238
6.5 平衡二叉树 241
6.5.1 平衡二叉树的定义 241
6.5.2 平衡二叉树的调整 242
习题6 247
第7章 图 249
7.1 图的概念 249
7.1.1 图的定义 249
7.1.2 图的基本术语 250
7.1.3 图的抽象数据类型 253
7.2.1 邻接矩阵 254
7.2 图的存储结构 254
7.2.2 邻接表 257
7.2.3 边集数组 262
7.3 图的遍历 264
7.3.1 深度优先搜索遍历 264
7.3.2 广度优先搜索遍历 267
7.3.3 非连通图的遍历 269
习题7 271
8.1 图的生成树和最小生成树 273
8.1.1 生成树和最小生成树的概念 273
第8章 图的应用 273
8.1.2 普里姆算法 275
8.1.3 克鲁斯卡尔算法 278
8.2 最短路径 281
8.2.1 最短路径的概念 281
8.2.2 从一顶点到其余各顶点的最短路径 282
8.2.3 每对顶点之间的最短路径 286
8.3 拓扑排序 290
8.3.1 拓扑排序的概念 290
8.3.2 拓扑排序算法 293
8.4.1 顶点事件的发生时间 296
8.4 关键路径 296
8.4.2 计算关键路径的方法和算法 299
习题8 302
第9章 查找 305
9.1 查找的概念 305
9.2 顺序表查找 306
9.2.1 顺序查找 306
9.2.2 二分查找 307
9.3.1 索引的概念 311
9.3 索引查找 311
9.3.2 索引查找算法 314
9.3.3 分块查找 316
9.4 散列查找 317
9.4.1 散列的概念 317
9.4.2 散列函数 319
9.4.3 处理冲突的方法 321
9.4.4 散列表的运算 324
9.5 B树查找 328
9.5.1 B_树定义 328
9.5.2 B_树查找 330
9.5.3 B_树插入 332
9.5.4 B_树册除 335
9.5.5 对B_树的其他运算 337
9.5.6 B+树简介 340
习题9 341
第10章 排序 343
10.1 排序的基本概念 343
10.2 插入排序 344
10.2.1 直接插入排序 345
10.2.2 希尔排序 346
10.3.1 直接选择排序 347
10.3 选择排序 347
10.3.2 堆排序 348
10.4 交换排序 352
10.4.1 气泡排序 352
10.4.2 快速排序 354
10.5 归并排序 357
10.6 各种内排序方法的比较 360
10.7 外排序 362
10.7.1 外排序的概念 362
10.7.2 外排序算法 364
习题10 371