第1章 概论 1
1.1什么是数据结构 1
1.2基本概念和术语 4
1.3算法和算法分析 7
1.3.1算法的定义及特性 7
1.3.2算法的设计要求 8
1.3.3算法效率的衡量方法 9
1.3.4算法的时间复杂度 10
1.3.5算法的空间复杂度 15
1.4抽象数据类型 16
习题 18
第2章 线性表 20
2.1线性表的类型定义 20
2.1.1线性表的概念 20
2.1.2线性表的抽象数据类型 21
2.2线性表的顺序表示和实现 22
2.2.1线性表的顺序表示 22
2.2.2顺序表基本运算的实现 23
2.3线性表的链式表示和实现 28
2.3.1线性表的链式表示 29
2.3.2单链表上基本运算的实现 32
2.4双链表 40
2.5循环链表 44
2.6线性表实现方法的比较 46
2.7算法设计举例 47
习题 52
第3章 栈和队列 55
3.1栈 55
3.1.1栈的类型定义 55
3.1.2顺序栈的表示和实现 57
3.1.3链栈的表示和实现 60
3.2栈的应用举例 62
3.2.1十进制数转换为其他进制数 62
3.2.2表达式中括号的匹配检查 63
3.2.3表达式求值 64
3.2.4利用栈消除递归 72
3.3队列 77
3.3.1队列的类型定义 77
3.3.2循环队列——队列的顺序表示和实现 78
3.3.3链队列——队列的链式表示和实现 82
3.4算法设计举例 83
习题 87
第4章 串 90
4.1串的基本概念 90
4.2串的表示和实现 91
4.2.1串的顺序存储结构 91
4.2.2串的链式存储结构 94
4.3串的模式匹配 95
4.3.1朴素的模式匹配算法 95
4.3.2 KMP算法 96
习题 101
第5章 数组 104
5.1数组的基本概念 104
5.2矩阵的压缩存储 107
5.2.1特殊矩阵 107
5.2.2稀疏矩阵 110
5.3算法设计举例 117
习题 121
第6章 树和二叉树 124
6.1树的概念 124
6.2二叉树的概念和性质 126
6.2.1二叉树的概念和抽象数据类型 126
6.2.2二叉树的性质 129
6.3二叉树的表示和实现 131
6.3.1二叉树的存储结构 131
6.3.2二叉树的遍历运算 133
6.3.3二叉树的其他基本运算 141
6.4树和森林 143
6.4.1树的存储结构 143
6.4.2树、森林和二叉树的相互转换 146
6.4.3树和森林的遍历运算 148
6.4.4树和森林的其他基本运算 151
6.5线索二叉树 154
6.5.1线索二叉树的概念 154
6.5.2线索二叉树的基本运算 157
6.6算法设计举例 161
习题 162
第7章 树和二叉树的应用 166
7.1表达式树 166
7.2哈夫曼树和哈夫曼编码 171
7.2.1哈夫曼树 171
7.2.2哈夫曼编码 175
7.3堆和优先级队列 178
7.3.1堆 178
7.3.2优先级队列 179
7.4并查集 184
7.5算法设计举例 187
习题 189
第8章 图 191
8.1图的概念 191
8.2图的存储结构 196
8.2.1邻接矩阵 196
8.2.2邻接表 200
8.2.3十字链表 205
8.2.4邻接多重表 205
8.3图的遍历 206
8.3.1深度优先遍历 207
8.3.2广度优先遍历 209
8.3.3图的连通分量和生成树 212
习题 213
第9章 图的应用 217
9.1最小生成树 217
9.1.1最小生成树的概念 217
9.1.2 Prim算法 218
9.1.3 Kruskal算法 222
9.2有向无环图及其应用 225
9.2.1拓扑排序 225
9.2.2关键路径 230
9.3最短路径 236
9.3.1单源点最短路径 236
9.3.2每对顶点之间的最短路径 240
习题 243
第10章 集合与查找 247
10.1基本概念 247
10.2静态查找表上的查找 248
10.2.1顺序查找 248
10.2.2折半查找 250
10.2.3分块查找 254
10.3动态查找表上的查找 256
10.3.1二叉查找树 256
10.3.2平衡二叉树 263
10.3.3 B树 275
10.3.4 B+树 280
10.3.5字典树 281
10.4算法设计举例 282
习题 285
第11章 散列表 288
11.1散列表的概念 288
11.2构造散列函数的方法 289
11.2.1直接定址法 289
11.2.2折叠法 289
11.2.3数字分析法 289
11.2.4平方取中法 290
11.2.5除留余数法 290
11.3解决冲突的方法 291
11.3.1闭散列法 291
11.3.2开散列法 293
11.4散列表的实现 294
11.4.1闭散列表的表示和实现 294
11.4.2开散列表的表示和实现 298
11.4.3闭散列表与开散列表的比较 302
11.5散列表的查找性能分析 302
习题 303
第12章 排序 306
12.1排序的基本概念 306
12.2插入排序 307
12.2.1直接插入排序 307
12.2.2折半插入排序 308
12.2.3希尔排序 309
12.3交换排序 310
12.3.1冒泡排序 310
12.3.2快速排序 311
12.4选择排序 315
12.4.1直接选择排序 315
12.4.2堆排序 316
12.4.3锦标赛排序 320
12.5归并排序 320
12.6基数排序 322
12.7各种内部排序方法的比较 324
12.8外部排序 327
12.8.1置换选择排序 328
12.8.2多路归并排序 330
习题 331
附录A 上机实验参考题目 334
参考文献 336