第1章 绪论 1
1.1 数据结构课程讨论的内容 1
1.1.1 求解问题举例 2
1.1.2 本课程讨论的内容 4
1.2 基本概念与术语 5
1.2.1 数据与数据结构 5
1.2.2 数据类型 9
1.2.3 抽象数据类型 10
1.3 算法 11
1.3.1 算法的基本概念 11
1.3.2 算法的描述 12
1.3.3 相关约定 14
1.4 算法分析 14
1.4.1 时间复杂度分析 15
1.4.2 空间复杂度分析 20
1.4.3 算法设计举例 21
小结 25
习题一 26
第2章 线性表 28
2.1 线性表的类型定义 28
2.1.1 线性表的基本概念 28
2.1.2 线性表的抽象数据类型描述 29
2.2 线性表的顺序存储及其实现 32
2.2.1 顺序表的顺序存储 32
2.2.2 顺序表上基本操作的实现 35
2.2.3 顺序表应用举例 39
2.3 线性表的链式存储及实现 42
2.3.1 单链表的表示 42
2.3.2 单链表上基本操作的实现 43
2.3.3 单链表应用举例 51
2.3.4 其他链表 55
2.4 顺序表与链表的比较 61
2.5 线性表的应用举例 65
小结 69
习题二 69
第3章 栈与队列 73
3.1 栈 74
3.1.1 栈的概念 74
3.1.2 栈的抽象数据类型描述 74
3.1.3 顺序栈及其基本操作的实现 75
3.1.4 链栈及其基本操作的实现 79
3.1.5 栈的应用 81
3.2 队列 94
3.2.1 队列的概念 94
3.2.2 队列的抽象数据类型描述 94
3.2.3 顺序队列及其基本操作的实现 95
3.2.4 链队列及其基本操作的实现 100
3.2.5 其他队列 102
3.2.6 队列的应用 104
3.3 栈与队列的比较 107
3.4 栈与队列的综合应用举例 109
小结 112
习题三 114
第4章 串与数组 118
4.1 串的类型定义 118
4.1.1 串的基本概念 118
4.1.2 串的抽象数据类型描述 119
4.2 串的存储结构 120
4.2.1 定长顺序存储表示 120
4.2.2 堆分配存储表示 124
4.2.3 块链存储表示 125
4.3 串的模式匹配操作 126
4.3.1 Brute-Force模式匹配算法 126
4.3.2 KMP模式匹配算法 128
4.4 串的应用举例 133
4.5 数组的概念及顺序存储结构 137
4.5.1 数组的基本概念 137
4.5.2 数组的抽象数据类型描述 138
4.5.3 数组的顺序存储结构 139
4.6 特殊矩阵的压缩存储 140
4.6.1 对称矩阵的压缩存储 140
4.6.2 三角矩阵的压缩存储 141
4.6.3 对角矩阵的压缩存储 141
4.7 稀疏矩阵的压缩存储 142
4.7.1 三元组顺序表 142
4.7.2 行逻辑链接的顺序表 147
4.7.3 稀疏矩阵的十字链表存储 151
4.8 数组的应用举例 152
小结 154
习题四 155
第5章 树与二叉树 157
5.1 树的基本概念 158
5.2 二叉树 161
5.2.1 二叉树的基本概念 161
5.2.2 二叉树的性质 164
5.2.3 二叉树的存储结构 165
5.3 二叉树的遍历 168
5.3.1 二叉树的遍历方法及其实现 169
5.3.2 二叉树遍历算法的应用举例 177
5.3.3 建立二叉树 181
5.4 哈夫曼树及哈夫曼编码 189
5.4.1 哈夫曼树的基本概念 189
5.4.2 哈夫曼树和哈夫曼编码的构造方法 190
5.4.3 构造哈夫曼树和哈夫曼编码的算法 192
5.5 树与森林 195
5.5.1 树、森林与二叉树之间的转换 195
5.5.2 树的存储结构 198
5.5.3 树和森林的遍历 201
小结 203
习题五 204
第6章 图 207
6.1 图的类型定义 207
6.1.1 图的基本概念 207
6.1.2 图的抽象数据类型描述 211
6.2 图的存储结构 212
6.2.1 邻接矩阵 212
6.2.2 邻接表 217
6.3 图的遍历 220
6.3.1 广度优先搜索 221
6.3.2 深度优先搜索 223
6.3.3 图的遍历方法的应用举例 225
6.4 最小生成树 230
6.4.1 最小生成树的基本概念 230
6.4.2 克鲁斯卡尔算法 232
6.4.3 普里姆算法 232
6.5 最短路径 238
6.5.1 求某个顶点到其余各顶点的最短路径 238
6.5.2 求每一对顶点之间的最短路径 241
6.6 拓扑排序 245
6.6.1 拓扑排序的基本概念 246
6.6.2 拓扑排序的实现 247
6.7 关键路径 249
小结 256
习题六 257
第7章 内排序 260
7.1 排序的基本概念 260
7.2 插入排序 262
7.2.1 直接插入排序 262
7.2.2 希尔排序 265
7.3 交换排序 266
7.3.1 冒泡排序 267
7.3.2 快速排序 268
7.4 选择排序 271
7.4.1 直接选择排序 272
7.4.2 树形选择排序 273
7.4.3 堆排序 274
7.5 归并排序 279
7.6 基数排序 282
7.6.1 多关键字排序 282
7.6.2 链式基数排序 283
小结 284
习题七 286
第8章 外排序 289
8.1 外排序方法 289
8.2 磁盘排序 291
8.2.1 磁盘信息的存取 291
8.2.2 多路平衡归并 292
8.2.3 置换—选择排序 293
8.2.4 最优归并树 296
小结 300
习题八 301
第9章 查找 304
9.1 查找的基本概念 304
9.2 静态表查找 305
9.2.1 顺序查找 306
9.2.2 二分查找 307
9.2.3 分块查找 310
9.3 动态表查找 312
9.3.1 二叉排序树 312
9.3.2 平衡二叉树 322
9.3.3 B_树和B+树 325
9.3.4 红黑树简介 333
9.4 哈希表查找 336
9.4.1 哈希表的定义 336
9.4.2 常用的哈希函数 337
9.4.3 处理冲突的方法 339
9.4.4 哈希表的查找和性能分析 348
小结 349
习题九 350
附录 参考答案 353
习题一 353
习题二 355
习题三 360
习题四 368
习题五 370
习题六 374
习题七 382
习题八 386
习题九 389
参考文献 395