第1章 概述 1
1.1 数据结构的发展 1
1.2 基本概念 2
1.3 算法描述与分析 5
习题1 10
第2章 线性表 13
2.1 线性表的定义及基本操作 13
2.1.1 线性表的基本概念 13
2.1.2 线性表的基本操作 14
2.2 顺序表 15
2.2.1 顺序表的定义 15
2.2.2 基本操作在顺序表上的实现 16
2.3 链表 19
2.3.1 单链表的表示和实现 19
2.3.2 双链表的表示和实现 27
2.3.3 循环链表的表示和实现 32
2.3.4 静态链表的表示与实现 39
习题2 44
第3章 特殊线性表 49
3.1 栈 49
3.1.1 栈的定义及其基本操作 49
3.1.2 顺序栈的表示和实现 50
3.1.3 链栈的表示与实现 55
3.2 队列 58
3.2.1 队列的定义及其基本操作 58
3.2.2 顺序队列的表示和实现 59
3.2.3 链队列的表示和实现 64
3.3 串 66
3.3.1 串的定义及其基本操作 66
3.3.2 顺序串的表示与实现 67
3.3.3 链串的表示和实现 72
3.3.4 串的模式匹配 78
习题3 84
第4章 数组和广义表 87
4.1 数组 87
4.1.1 数组的定义及基本操作 87
4.1.2 数组存储结构 88
4.1.3 矩阵的压缩存储 89
4.2 广义表 103
4.2.1 广义表的定义和基本操作 103
4.2.2 广义表的存储 104
习题4 109
第5章 树和二叉树 113
5.1 树的定义和基本操作 113
5.1.1 树的定义和基本术语 113
5.1.2 树的基本操作 114
5.2 二叉树的定义和性质 115
5.2.1 二叉树的定义 115
5.2.2 二叉树的性质与结论 115
5.3 二叉树的存储 118
5.3.1 二叉树的顺序存储结构 118
5.3.2 二叉树的链式存储结构 122
5.4 二叉树的遍历及应用 123
5.4.1 二叉树的遍历 123
5.4.2 二叉树递归遍历应用举例 127
5.4.3 二叉树的非递归遍历 130
5.5 线索二叉树 132
5.5.1 线索二叉树的定义 132
5.5.2 线索化处理算法 133
5.6 树和森林 137
5.6.1 树的存储结构 137
5.6.2 树、森林与二叉树之间的转换 140
5.6.3 树和森林的遍历 141
5.7 赫夫曼树及其应用 142
5.7.1 赫夫曼树 142
5.7.2 赫夫曼编码 145
习题5 148
第6章 图 153
6.1 图的基本概念 153
6.2 图的存储 156
6.2.1 邻接矩阵 156
6.2.2 邻接表与逆邻接表 158
6.2.3 十字链表 161
6.2.4 邻接多重表 162
6.3 图的遍历 163
6.3.1 深度优先搜索及其生成树 163
6.3.2 广度优先搜索及其生成树 164
6.4 最小生成树 166
6.4.1 Kruskal算法 166
6.4.2 Prim算法 167
6.5 图的应用 168
6.5.1 拓扑排序 169
6.5.2 关键路径 170
6.5.3 最短路径 173
习题6 175
第7章 查找 177
7.1 查找的基本概念 177
7.2 静态查找表 178
7.2.1 顺序查找 179
7.2.2 二分查找 181
7.2.3 分块查找 184
7.3 动态查找表 186
7.3.1 二叉排序树 186
7.3.2 平衡二叉树 193
7.3.3 B树与B+树 199
7.3.4 键树 201
7.4 散列表 203
7.4.1 散列表的定义 203
7.4.2 散列函数的构造方法 204
7.4.3 处理冲突的方法 206
7.4.4 散列表的查找与分析 212
习题7 213
第8章 内部排序 217
8.1 排序的基本概念 217
8.2 插入排序 220
8.3 交换排序 228
8.4 选择排序 232
8.5 归并排序 239
8.6 计数排序 242
8.7 基数排序 243
8.8 各种排序方法的综合比较 246
习题8 247
第9章 外部排序 251
9.1 外存储器简介 251
9.2 外部排序的方法 252
9.3 多路归并排序 254
9.4 置换-选择排序 256
9.5 最佳归并树 258
习题9 259
第10章 文件 261
10.1 文件的基本概念 261
10.2 顺序文件 263
10.3 索引文件 265
10.3.1 ISAM文件 266
10.3.2 VSAM文件 267
10.4 散列文件 268
10.5 多关键字文件 270
10.5.1 多重表文件 270
10.5.2 倒排文件 270
习题10 271
参考文献 273