目录
第1章数据结构概论1
1.1数据结构的概念1
1.1.1数据结构举例1
1.1.2数据与数据结构2
1.1.3数据结构的分类3
1.1.4“数据结构”课程的内容4
1.2数据结构的抽象形式6
1.2.1数据类型6
1.2.2数据抽象与抽象数据类型7
1.3作为ADT的C++类9
1.3.1面向对象的概念9
1.3.2C++中的类10
1.3.3C++中的对象12
1.3.4C++的输入输出13
1.3.5C++中的函数14
1.3.6动态存储分配17
1.3.7C++中的继承18
1.3.8多态性19
1.3.9C++的模板23
1.4算法定义24
1.5算法性能分析与度量25
1.5.1算法的性能标准26
1.5.2算法复杂性度量26
1.5.3算法的渐进分析31
1.5.4最坏、最好和平均情况35
习题36

第2章线性表40
2.1线性表的概念40
2.1.1线性表的定义40
2.1.2线性表的类定义41
2.2顺序表42
2.2.1顺序表的定义和特点42
2.2.2顺序表的类定义及其操作42
2.2.3顺序表的性能分析47
2.2.4顺序表的应用49
2.3单链表49
2.3.1单链表的概念50
2.3.2单链表的类定义51
2.3.3单链表中的插入与删除52
2.3.4带附加头结点的单链表54
2.3.5单链表的模板类56
2.4线性链表的其他变形62
2.4.1循环单链表62
2.4.2双向链表65
2.5单链表的应用: 多项式及其运算69
2.5.1多项式的表示69
2.5.2多项式的类定义71
2.5.3多项式的加法73
2.6静态链表74
习题75

第3章栈和队列81
3.1栈81
3.1.1栈的定义81
3.1.2顺序栈82
3.1.3链式栈85
3.1.4栈的应用之一——括号匹配87
3.1.5栈的应用之二——表达式的计算88
3.2栈与递归93
3.2.1递归的概念93
3.2.2递归过程与递归工作栈97
3.2.3用回溯法求解迷宫问题102
3.3队列105
3.3.1队列的概念105
3.3.2循环队列106
3.3.3链式队列109
3.3.4队列应用举例: 打印二项展开式 (a+b)i的系数111
3.4优先级队列113
3.4.1优先级队列的概念113
3.4.2优先级队列的存储表示和实现114
3.5双端队列115
3.5.1双端队列的概念116
3.5.2双端队列的数组表示117
习题119

第4章数组、串与广义表125
4.1多维数组的概念与存储125
4.1.1多维数组的概念125
4.1.2多维数组的存储表示126
4.2特殊矩阵128
4.2.1对称矩阵的压缩存储128
4.2.2三对角/多对角矩阵的压缩存储130
4.3稀疏矩阵131
4.3.1稀疏矩阵及其三元组数组表示131
4.3.2稀疏矩阵的转置134
4.3.3稀疏矩阵的相加137
4.3.4矩阵的十字链表表示139
4.4字符串140
4.4.1字符串的概念140
4.4.2C++有关字符串的库函数141
4.4.3字符串的实现143
4.4.4字符串的自定义类145
4.4.5字符串操作的实现146
4.4.6字符串的模式匹配148
4.4.7字符串的存储方法154
4.5广义表156
4.5.1广义表的定义与性质156
4.5.2广义表的表示157
4.5.3广义表存储结构的实现158
4.5.4广义表的递归算法161
习题168

第5章树174
5.1树的基本概念174
5.1.1树的定义和术语174
5.1.2树的抽象数据类型176
5.2二叉树177
5.2.1二叉树的定义177
5.2.2二叉树的性质178
5.2.3二叉树的抽象数据类型179
5.3二叉树的存储表示180
5.3.1二叉树的数组存储表示180
5.3.2二叉树的链接存储表示181
5.4二叉树遍历及其应用186
5.4.1二叉树遍历的递归算法186
5.4.2二叉树遍历的应用188
5.4.3二叉树遍历的非递归算法190
5.4.4二叉树的计数194
5.5线索二叉树197
5.5.1线索198
5.5.2中序线索二叉树的建立和遍历198
5.5.3前序与后序的线索化二叉树204
5.6树与森林205
5.6.1树的存储表示205
5.6.2树、森林与二叉树的转换211
5.7树与森林的遍历及其应用212
5.7.1树与森林的深度优先遍历213
5.7.2树和森林的广度优先遍历215
5.7.3树遍历算法的应用216
5.8堆217
5.8.1最小堆和最大堆217
5.8.2堆的建立219
5.8.3堆的插入与删除220
5.9Huffman树及其应用222
5.9.1路径长度222
5.9.2Huffman树223
5.9.3Huffman树的应用: 最优判定树226
5.9.4Huffman树的应用: Huffman编码227
习题229

第6章集合与字典237
6.1集合及其表示237
6.1.1集合的基本概念237
6.1.2用位向量实现集合抽象数据类型238
6.1.3用有序链表实现集合的抽象数据类型243
6.2并查集与等价类248
6.2.1并查集的定义及其实现248
6.2.2并查集的应用: 等价类划分252
6.3字典254
6.3.1字典的概念254
6.3.2字典的线性表描述256
6.4跳表258
6.4.1跳表的概念258
6.4.2跳表的搜索、插入和删除259
6.5散列260
6.5.1散列表与散列方法261
6.5.2散列函数261
6.5.3处理冲突的闭散列方法263
6.5.4处理冲突的开散列方法272
6.5.5散列表分析274
习题276

第7章搜索结构282
7.1静态搜索结构283
7.1.1静态搜索表283
7.1.2顺序搜索285
7.1.3基于有序顺序表的顺序搜索和折半搜索286
7.1.4基于有序顺序表的其他搜索方法291
7.2二叉搜索树293
7.2.1二叉搜索树的概念293
7.2.2二叉搜索树上的搜索295
7.2.3二叉搜索树的插入295
7.2.4二叉搜索树的删除297
7.2.5二叉搜索树的性能分析298
7.3AVL树301
7.3.1AVL树的概念301
7.3.2平衡化旋转302
7.3.3AVL树的插入306
7.3.4AVL树的删除309
7.3.5AVL树的性能分析314
7.4伸展树315
7.5红黑树318
7.5.1红黑树的概念和性质318
7.5.2红黑树的搜索319
7.5.3红黑树的插入319
7.5.4红黑树的删除320
习题323

第8章图330
8.1图的基本概念330
8.1.1与图有关的若干概念330
8.1.2图的抽象数据类型332
8.2图的存储结构333
8.2.1图的邻接矩阵表示334
8.2.2图的邻接表表示339
8.2.3图的邻接多重表表示345
8.3图的遍历347
8.3.1深度优先搜索348
8.3.2广度优先搜索349
8.3.3连通分量350
8.3.4重连通分量352
8.4最小生成树354
8.4.1Kruskal算法355
8.4.2Prim算法358
8.5最短路径360
8.5.1非负权值的单源最短路径360
8.5.2任意权值的单源最短路径363
8.5.3所有顶点之间的最短路径366
8.6用顶点表示活动的网络(AOV网络)368
8.7用边表示活动的网络(AOE网络)372
习题377

第9章排序384
9.1排序的概念及其算法性能分析384
9.1.1排序的概念384
9.1.2排序算法的性能评估385
9.1.3排序表的类定义387
9.2插入排序388
9.2.1直接插入排序388
9.2.2折半插入排序389
9.2.3希尔排序391
9.3快速排序392
9.3.1快速排序的过程392
9.3.2快速排序的性能分析394
9.3.3快速排序的改进算法395
9.3.4三路划分的快速排序算法398
9.4选择排序400
9.4.1直接选择排序400
9.4.2锦标赛排序401
9.4.3堆排序406
9.5归并排序409
9.5.1归并409
9.5.2归并排序算法410
9.6基于链表的排序算法411
9.6.1链表插入排序412
9.6.2链表归并排序414
9.6.3链表排序结果的重排415
9.7分配排序418
9.7.1桶式排序418
9.7.2基数排序419
9.7.3MSD基数排序420
9.7.4LSD基数排序422
9.8内部排序算法的分析424
9.8.1排序方法的下界424
9.8.2各种内部排序方法的比较426
习题427

第10章文件、外部排序与搜索435
10.1主存储器和外存储器435
10.1.1磁带435
10.1.2磁盘存储器437
10.1.3缓冲区与缓冲池439
10.2文件组织441
10.2.1文件的概念441
10.2.2文件的存储结构442
10.3外排序451
10.3.1外排序的基本过程451
10.3.2k路平衡归并与败者树453
10.3.3初始归并段的生成458
10.3.4并行操作的缓冲区处理462
10.3.5最佳归并树465
10.4多级索引结构467
10.4.1静态的ISAM方法467
10.4.2动态的m路搜索树468
10.4.3B树470
10.4.4B树的插入472
10.4.5B树的删除474
10.4.6B+树478
10.4.7VSAM481
10.5字典树482
10.5.1字典树的概念482
10.5.2双链树表示483
10.5.3Trie树484
习题486

附录A部分习题答案495

参考文献501