第1章 绪论 1
1.1 什么是数据结构 1
1.1.1 数据结构示例 1
1.1.2 基本术语 2
1.1.3 数据结构 3
1.2 算法描述 5
1.2.1 基本概念 5
1.2.2 算法描述 5
1.3 算法分析 6
1.3.1 时间复杂度 7
1.3.2 空间复杂度 8
本章小结 8
习题1 9
第2章 线性表 14
2.1 线性表的定义及其运算 14
2.1.1 线性表的定义 14
2.1.2 线性表的运算 15
2.1.3 线性表的抽象数据类型描述 15
2.2 线性表的顺序存储结构 16
2.2.1 顺序表结构 16
2.2.2 顺序表运算 17
2.2.3 顺序表存储空间的动态分配 20
2.3 线性表的链式存储结构 21
2.3.1 单链表结构 21
2.3.2 单链表运算 22
2.3.3 循环链表结构 27
2.3.4 双向链表结构 29
2.4 一元多项式的表示及相加 31
2.4.1 一元多项式的表示 31
2.4.2 一元多项式的相加 32
2.5 顺序表与链表的比较 34
2.6 算法应用举例 35
本章小结 37
习题2 38
第3章 栈和队列 40
3.1 栈 40
3.1.1 栈的定义 40
3.1.2 栈的运算 41
3.1.3 栈的抽象数据类型描述 41
3.1.4 顺序栈 41
3.1.5 链栈 45
3.1.6 栈的应用 46
3.2 队列 52
3.2.1 队列的定义 52
3.2.2 队列的基本运算 52
3.2.3 队列的抽象数据类型描述 52
3.2.4 循环队列 53
3.2.5 链队列 56
3.2.6 队列的应用 58
本章小结 58
习题3 58
第4章 串 61
4.1 串的定义及运算 61
4.1.1 基本概念 61
4.1.2 串的运算 62
4.1.3 串的抽象数据类型描述 62
4.2 串的存储结构 62
4.2.1 顺序存储 62
4.2.2 链式存储 64
4.2.3 索引存储 65
4.3 串运算的实现 65
4.3.1 串插入 65
4.3.2 串删除 67
4.3.3 子串定位 68
4.4 串操作应用举例 70
4.4.1 文本编辑 70
4.4.2 建立词索引表 72
本章小结 72
习题4 72
第5章 多维数组和广义表 74
5.1 多维数组 74
5.1.1 多维数组的概念 74
5.1.2 多维数组在计算机内的存储 75
5.2 多维数组的存储结构 75
5.2.1 行优先顺序 75
5.2.2 列优先顺序 76
5.3 特殊矩阵及其压缩存储 76
5.3.1 特殊矩阵 76
5.3.2 压缩存储 77
5.4 稀疏矩阵 79
5.4.1 稀疏矩阵的存储 80
5.4.2 稀疏矩阵的运算 82
5.5 广义表 91
5.5.1 基本概念 91
5.5.2 存储结构 92
5.5.3 基本运算 94
本章小结 96
习题5 96
第6章 树和二叉树 99
6.1 树的基本概念 99
6.1.1 树的定义 99
6.1.2 基本术语 100
6.1.3 树的表示 101
6.1.4 树的性质 102
6.2 二叉树 102
6.2.1 二叉树的定义 102
6.2.2 二叉树的性质 103
6.2.3 二叉树的存储结构 105
6.2.4 二叉树的抽象数据类型 108
6.3 遍历二叉树 108
6.3.1 前根遍历 109
6.3.2 中根遍历 110
6.3.3 后根遍历 111
6.3.4 遍历算法应用举例 113
6.4 线索二叉树 117
6.4.1 线索的概念 117
6.4.2 线索的描述 118
6.4.3 线索的算法实现 120
6.4.4 线索二叉树上的运算 120
6.5 树和森林 123
6.5.1 树的存储结构 123
6.5.2 树、森林和二叉树的转换 125
6.5.3 树和森林的遍历 127
6.6 回溯法与树的遍历 128
6.7 哈夫曼树 129
6.7.1 基本术语 129
6.7.2 哈夫曼树简介 129
6.7.3 哈夫曼树的应用 133
本章小结 133
习题6 134
第7章 图 137
7.1 图的基本概念 137
7.1.1 图的定义 137
7.1.2 图的基本术语 137
7.2 图的存储结构 140
7.2.1 邻接矩阵 140
7.2.2 邻接表 143
7.2.3 邻接多重表 147
7.3 图的遍历 148
7.3.1 深度优先搜索遍历 148
7.3.2 广度优先搜索遍历 153
7.4 生成树和最小生成树 157
7.4.1 基本概念 157
7.4.2 普里姆(prim)算法 158
7.4.3 克鲁斯卡尔(kruskal)算法 161
7.5 最短路径 164
7.5.1 单源点最短路径 164
7.5.2 所有顶点对之间的最短路径 167
7.6 有向无环图及其应用 170
7.6.1 拓扑排序 171
7.6.2 关键路径 175
本章小结 179
习题7 180
第8章 查找 183
8.1 查找的基本概念 183
8.2 线性表的查找 184
8.2.1 顺序查找 184
8.2.2 二分查找 185
8.2.3 索引查找 188
8.2.4 分块查找 192
8.3 树表查找 193
8.3.1 二叉排序树查找 193
8.3.2 平衡二叉树查找 198
8.3.3 B树及B树上的查找 202
8.3.4 键树 204
8.4 散列查找 204
8.4.1 基本概念 204
8.4.2 散列函数的构造 205
8.4.3 解决冲突的方法 207
8.4.4 散列查找算法的实现 210
8.4.5 散列查找的性能分析 212
本章小结 214
习题8 215
第9章 内排序 216
9.1 基本概念 216
9.1.1 排序介绍 216
9.1.2 基本概念 217
9.2 插入排序 218
9.2.1 直接插入排序 218
9.2.2 二分插入排序 219
9.2.3 希尔排序 220
9.3 交换排序 221
9.3.1 冒泡排序 221
9.3.2 快速排序 223
9.4 选择排序 225
9.4.1 直接选择排序 225
9.4.2 树型选择排序 226
9.4.3 堆排序 227
9.5 归并排序 232
9.5.1 二路归并排序 232
9.5.2 多路归并排序 234
9.6 分配排序 234
9.6.1 多关键字排序 234
9.6.2 链式基数排序 235
9.7 各种内排序方法的比较和选择 238
9.7.1 各种内排序方法的比较 238
9.7.2 各种内排序方法的选择 238
本章小结 239
习题9 239
第10章 外排序 241
10.1 外排序的基本概念 241
10.2 多路平衡归并的实现 242
10.2.1 初始归并段的生成 242
10.2.2 多路平衡归并的实现 244
本章小结 249
习题10 249
第11章 文件 250
11.1 文件的基本概念 250
11.2 顺序文件 250
11.3 索引文件 251
11.4 ISAM文件和VSAM文件 252
11.4.1 ISAM文件 252
11.4.2 VSAM文件 253
11.5 散列文件 253
11.6 多关键字文件 254
11.6.1 多重表文件 255
11.6.2 倒排文件 256
本章小结 256
习题11 257
参考文献 258