第1章 绪论 1
1.1 数据结构课程讨论的内容 1
1.1.1 求解问题举例 1
1.1.2 本课程讨论的内容 4
1.2 基本概念与术语 4
1.2.1 数据与数据结构 5
1.2.2 数据类型 9
1.2.3 抽象数据类型 10
1.3 算法和算法分析 12
1.3.1 算法的基本概念 12
1.3.2 算法的描述 13
1.3.3 算法分析 14
1.3.4 算法设计举例 20
1.4 Java提供的泛型方法 23
小结 25
习题1 26
第2章 线性表 29
2.1 线性表及其基本操作 29
2.1.1 线性表的基本概念 29
2.1.2 线性表的抽象数据类型描述 30
2.2 线性表的顺序存储及其实现 31
2.2.1 线性表的顺序存储 31
2.2.2 顺序表上基本操作的实现 33
2.2.3 顺序表应用举例 36
2.3 线性表的链式存储及其实现 37
2.3.1 单链表的表示 38
2.3.2 单链表上基本操作的实现 40
2.3.3 单链表应用举例 47
2.3.4 其他链表 50
2.4 顺序表与链表的比较 55
2.5 线性表的应用举例 56
小结 63
习题2 63
第3章 栈与队列 66
3.1 栈 66
3.1.1 栈的概念 66
3.1.2 栈的抽象数据类型描述 67
3.1.3 顺序栈及其基本操作的实现 67
3.1.4 链栈及其基本操作的实现 70
3.1.5 栈的应用 73
3.2 队列 85
3.2.1 队列的概念 85
3.2.2 队列的抽象数据类型描述 86
3.2.3 顺序队列及其基本操作的实现 86
3.2.4 链队列及其基本操作的实现 90
3.2.5 队列的应用 92
3.2.6 优先级队列 94
3.3 栈与队列的比较 98
3.4 栈与队列的综合应用举例 100
小结 103
习题3 104
第4章 串与数组 107
4.1 串概述 107
4.1.1 串的基本概念 107
4.1.2 串的抽象数据类型描述 108
4.2 串的存储结构 109
4.2.1 串的顺序存储结构 109
4.2.2 串的链式存储结构 109
4.3 顺序串的实现 110
4.3.1 顺序串的类定义 110
4.3.2 串的基本操作实现 112
4.4 串的模式匹配操作 115
4.4.1 Brute-Force模式匹配算法 115
4.4.2 KMP模式匹配算法 117
4.5 串的应用举例 122
4.6 数组的概念及顺序存储结构 128
4.6.1 数组的基本概念 129
4.6.2 数组的抽象数据类型描述 129
4.6.3 数组的顺序存储结构 130
4.7 特殊矩阵的压缩存储 131
4.7.1 对称矩阵的压缩存储 131
4.7.2 三角矩阵的压缩存储 132
4.7.3 对角矩阵的压缩存储 132
4.8 稀疏矩阵的压缩存储 133
4.8.1 稀疏矩阵的三元组表存储 133
4.8.2 稀疏矩阵的十字链表存储 139
4.9 数组的应用举例 141
小结 142
习题4 143
第5章 树与二叉树 146
5.1 树的基本概念 146
5.2 二叉树概述 149
5.2.1 二叉树的基本概念 149
5.2.2 二叉树的性质 151
5.2.3 二叉树的存储结构 153
5.3 二叉树的遍历 156
5.3.1 二叉树的遍历方法及其实现 156
5.3.2 二叉树遍历算法的应用举例 163
5.3.3 建立二叉树 168
5.4 哈夫曼树及哈夫曼编码 173
5.4.1 哈夫曼树的基本概念 173
5.4.2 哈夫曼树和哈夫曼编码的构造方法 174
5.4.3 构造哈夫曼树和哈夫曼编码类的描述 177
5.5 树与森林 179
5.5.1 树、森林与二叉树之间的转换 179
5.5.2 树的存储结构 182
5.5.3 树和森林的遍历 185
小结 187
习题5 188
第6章 图 190
6.1 图概述 190
6.1.1 图的基本概念 190
6.1.2 图的抽象数据类型描述 194
6.2 图的存储结构 194
6.2.1 邻接矩阵 195
6.2.2 邻接表 200
6.3 图的遍历 205
6.3.1 广度优先搜索 206
6.3.2 深度优先搜索 208
6.3.3 图的遍历方法的应用举例 209
6.4 最小生成树 215
6.4.1 最小生成树的基本概念 215
6.4.2 克鲁斯卡尔算法 216
6.4.3 普里姆算法 217
6.5 最短路径 220
6.5.1 求某个顶点到其余顶点的最短路径 221
6.5.2 求每一对顶点之间的最短路径 223
6.6 拓扑排序 227
6.6.1 拓扑排序的基本概念 228
6.6.2 拓扑排序的实现 228
6.7 关键路径 230
小结 234
习题6 235
第7章 内排序 238
7.1 排序的基本概念 238
7.2 插入排序 241
7.2.1 直接插入排序 241
7.2.2 希尔排序 244
7.3 交换排序 245
7.3.1 冒泡排序 245
7.3.2 快速排序 247
7.4 选择排序 250
7.4.1 直接选择排序 250
7.4.2 树形选择排序 251
7.4.3 堆排序 255
7.5 归并排序 260
7.6 基数排序 263
7.6.1 多关键字排序 263
7.6.2 链式基数排序 263
小结 266
习题7 267
第8章 外排序 269
8.1 外排序概述 269
8.2 磁盘排序 271
8.2.1 磁盘信息的存取 271
8.2.2 多路平衡归并 272
8.2.3 置换—选择排序 273
8.2.4 最优归并树 277
小结 280
习题8 282
第9章 查找 285
9.1 查找的基本概念 285
9.2 静态表查找 286
9.2.1 顺序查找 286
9.2.2 二分查找 287
9.2.3 分块查找 289
9.3 动态表查找 292
9.3.1 二叉排序树 292
9.3.2 平衡二叉树 299
9.3.3 B—树和B+树 302
9.3.4 红黑树简介 311
9.4 哈希表查找 313
9.4.1 哈希表的定义 313
9.4.2 常用的哈希函数 314
9.4.3 处理冲突的方法 317
9.4.4 哈希表的查找和性能分析 322
小结 323
习题9 324
附录A 习题参考答案 327
参考文献 390