第1章 绪论 1
1.1 为什么要学习数据结构 1
1.2 什么是数据结构 2
1.2.1 数据的逻辑结构 4
1.2.2 数据的存储结构 6
1.2.3 抽象数据类型 7
1.3 算法与算法分析 8
1.3.1 算法 8
1.3.2 算法的设计要求 10
1.3.3 算法效率的量度 10
1.3.4 算法的设计方式 15
习题 16
第2章 线性表 20
2.1 线性表的逻辑结构 20
2.1.1 线性表的定义 20
2.1.2 线性表的抽象数据类型定义 21
2.2 线性表的顺序表示和实现 23
2.2.1 顺序存储结构的定义 23
2.2.2 基本操作在顺序表中的实现 24
2.2.3 顺序存储结构的特点 27
2.3 线性表的链式表示和实现 28
2.3.1 单链表 28
2.3.2 双向链表 32
2.3.3 循环链表 33
2.3.4 链式存储结构的特点 34
2.4 一元多项式求和 35
2.4.1 一元多项式的表示 35
2.4.2 一元多项式的求和 36
习题 38
第3章 栈和队列 40
3.1 栈 40
3.1.1 栈的抽象数据类型定义 40
3.1.2 栈的实现 41
3.2 栈的应用举例 44
3.3 栈与递归 53
3.4 队列 57
3.4.1 队列的抽象数据类型定义 57
3.4.2 队列的实现 57
3.4.3 队列的应用 62
习题 65
第4章 串 68
4.1 串类型的定义 68
4.2 串的存储结构 70
4.2.1 串的顺序存储结构 70
4.2.2 堆分配存储表示 72
4.2.3 串的块链存储表示 74
4.3 串的模式匹配算法 75
4.3.1 求子串的定位函数 75
4.3.2 模式匹配的一种改进算法 77
4.4 串的应用 80
习题 81
第5章 数组和广义表 82
5.1 数组 82
5.1.1 数组的定义 82
5.1.2 数组的存储 82
5.1.3 特殊矩阵 84
5.1.4 稀疏矩阵 86
5.2 广义表 93
5.2.1 广义表的定义 93
5.2.2 广义表的存储结构 94
5.2.3 广义表的递归算法 96
5.2.4 广义表的应用 100
习题 100
第6章 树与二叉树 102
6.1 树的定义与基本术语 102
6.2 二叉树 104
6.2.1 二叉树的定义 104
6.2.2 二叉树的性质 105
6.2.3 二叉树的存储结构 106
6.3 二叉树的遍历 108
6.3.1 递归遍历二叉树 108
6.3.2 应用二叉树遍历的实例 110
6.4 线索二叉树 113
6.5 树与森林 115
6.5.1 树的存储表示 115
6.5.2 森林与二叉树的转换 117
6.5.3 树的遍历 118
6.5.4 森林的遍历 119
6.6 树的应用 119
6.6.1 堆 119
6.6.2 哈夫曼树与编码 124
习题 128
第7章 集合与搜索 133
7.1 集合及其表示 133
7.1.1 集合的定义 133
7.1.2 集合的抽象数据类型 134
7.1.3 用位向量实现集合 134
7.2 静态搜索结构 136
7.2.1 搜索的定义 136
7.2.2 静态搜索结构 137
7.2.3 顺序搜索 138
7.2.4 基于有序顺序表的折半搜索 139
7.2.5 分块搜索 142
7.3 二叉搜索树 144
7.3.1 二叉搜索树的定义 144
7.3.2 二叉搜索树的搜索 146
7.3.3 二叉搜索树的插入 147
7.3.4 二叉搜索树的建立 148
7.3.5 二叉搜索树的删除 149
7.4 AVL树 151
7.4.1 AVL树的定义 151
7.4.2 最小不平衡二叉树 152
7.4.3 不平衡二叉树的调整方法 153
7.4.4 建立平衡二叉树举例 158
7.5 应用举例计算机登录验证 160
习题 163
第8章 图 164
8.1 图的定义 164
8.1.1 图的定义与相关术语 164
8.1.2 图的抽象数据类型 166
8.2 图的存储结构 166
8.2.1 数组表示法 166
8.2.2 邻接表表示法 168
8.2.3 邻接多重表表示法 171
8.2.4 十字链表法 172
8.3 图的遍历 172
8.3.1 深度优先遍历 173
8.3.2 广度优先遍历 174
8.4 图的最小生成树 176
8.4.1 Prim算法 176
8.4.2 Kruskal算法 179
8.5 最短路径 180
8.5.1 单源最短路径 181
8.5.2 每对顶点的最短路径 183
8.6 拓扑排序 185
8.7 关键路径 187
8.8 应用实例 191
习题 193
第9章 排序 196
9.1 概述 196
9.2 插入排序 198
9.2.1 直接插入排序 198
9.2.2 折半插入排序 199
9.2.3 希尔排序 200
9.3 交换排序 202
9.3.1 冒泡排序 202
9.3.2 快速排序 204
9.4 选择排序 206
9.4.1 直接选择排序 206
9.4.2 堆排序 207
9.5 归并排序 211
9.5.1 归并排序概述 211
9.5.2 递归的归并排序算法 212
9.6 基数排序 213
9.6.1 多关键码排序 213
9.6.2 链式基数排序 214
9.7 各种排序方法的比较讨论 216
9.8 外部排序的方法 217
习题 220
第10章 索引结构和散列 222
10.1 静态索引结构 222
10.1.1 线性索引 222
10.1.2 倒排表 223
10.1.3 m路静态索引树 225
10.2 动态索引结构 225
10.2.1 动态的m路静态索引树 225
10.2.2 B_树 226
10.2.3 B_树的插入 229
10.2.4 B_树的删除 232
10.2.5 B+树 234
10.3 散列 235
10.3.1 散列函数 236
10.3.2 开散列方法 238
10.3.3 闭散列方法 239
10.3.4 散列表的实现 241
10.3.5 散列表分析 243
习题 244
参考文献 245