目
录第1章绪论1
1.1数据结构的基本概念1
1.1.1数据与数据元素1
1.1.2数据的逻辑结构2
1.1.3数据的存储结构4
1.2抽象数据类型5
1.3算法与算法分析7
1.3.1算法定义及描述7
1.3.2算法评价8
1.3.3算法性能分析与度量9
习题13
第2章线性表16
2.1线性表的基本概念17
2.1.1逻辑结构及基本操作17
2.1.2抽象数据类型18
2.2线性表的顺序存储实现19
2.2.1存储结构19
2.2.2基本操作的实现21
2.3线性表的链式存储实现24
2.3.1单链表24
2.3.2双链表30
2.3.3循环链表32
2.4应用33
2.4.1学生队列合并33
2.4.2一元多项式求导问题34
习题36
第3章栈38
3.1栈的基本概念39
3.1.1逻辑结构及基本操作393.1.2抽象数据类型39
3.2栈的顺序存储实现40
3.2.1存储结构40
3.2.2基本操作的实现42
3.2.3共享栈的介绍和基本操作43
3.3栈的链式存储实现45
3.3.1存储结构45
3.3.2基本操作的实现47
3.4栈和递归49
3.4.1函数调用栈49
3.4.2递归调用过程50
3.5应用51
3.5.1马踏棋盘51
3.5.2开关盒布线54
习题56
第4章队列58
4.1队列的基本概念59
4.1.1逻辑结构及基本操作59
4.1.2抽象数据类型60
4.2队列的顺序存储实现60
4.2.1存储结构60
4.2.2基本操作的实现61
4.2.3循环队列62
4.3队列的链式存储实现65
4.3.1存储结构65
4.3.2基本操作的实现66
4.4应用68
4.4.1滑动窗口最大值68
4.4.2图元识别71
习题74
第5章字符串76
5.1字符串的基本概念77
5.1.1逻辑结构及基本操作77
5.1.2抽象数据类型78
5.2字符串的存储结构及实现78
5.2.1定长串78
5.2.2堆串81
5.2.3块链串83
5.3字符串的模式匹配84
5.3.1朴素的模式匹配84
5.3.2无回溯的模式匹配86
5.4应用89
5.4.1最长公共子串89
5.4.2字符串全排列91
习题92
第6章数组94
6.1多维数组95
6.1.1数组的定义95
6.1.2数组的存储95
6.2矩阵的压缩存储96
6.2.1对称矩阵的压缩存储96
6.2.2三角矩阵的压缩存储97
6.2.3对角矩阵的压缩存储98
6.3稀疏矩阵98
6.3.1稀疏矩阵的压缩存储98
6.3.2稀疏矩阵的转置运算101
6.4应用103
6.4.1九宫格103
6.4.2三子棋105
习题106
第7章树与二叉树109
7.1树110
7.1.1树的定义110
7.1.2树的基本术语110
7.1.3树的存储结构111
7.2二叉树113
7.2.1二叉树的定义113
7.2.2二叉树的性质115
7.2.3二叉树的存储结构116
7.3二叉树的遍历118
7.3.1二叉树遍历的定义118
7.3.2二叉树的递归遍历119
7.3.3二叉树的非递归遍历121
7.4线索二叉树125
7.4.1线索二叉树的定义125
7.4.2线索二叉树的建立126
7.4.3线索二叉树的遍历127
7.5树与森林130
7.5.1树与森林的遍历130
7.5.2森林与二叉树的关系130
7.6哈夫曼(Huffman)树与编码132
7.6.1Huffman树132
7.6.2Huffman编码133
7.7应用137
7.7.1二叉排序树137
7.7.2中缀表达式138
习题140
第8章图142
8.1图的基本概念143
8.1.1图的定义143
8.1.2图的连通性145
8.1.3图的抽象数据类型147
8.2图的存储结构149
8.2.1邻接矩阵149
8.2.2邻接表151
8.2.3邻接多重表154
8.2.4十字链表155
8.3图的遍历算法156
8.3.1深度优先遍历157
8.3.2广度优先遍历159
8.4最小生成树161
8.4.1最小生成树问题161
8.4.2普里姆(Prim)算法162
8.4.3克鲁斯卡尔(Kruskal)算法165
8.5最短路径166
8.5.1最短路径问题166
8.5.2迪杰斯特拉(Dijkstra)算法166
8.5.3弗洛伊德(Floyd)算法169
8.6拓扑排序和关键路径171
8.6.1AOV网与拓扑排序171
8.6.2拓扑排序算法173
8.6.3AOE网与关键路径175
8.6.4关键路径算法176
8.7应用179
8.7.1扩大朋友圈179
8.7.2市内交通导航问题180
习题183
第9章查找186
9.1查找的基本概念187
9.2线性表的查找188
9.2.1顺序查找188
9.2.2二分查找189
9.2.3索引顺序查找192
9.3二叉查找树193
9.3.1二叉查找树的定义193
9.3.2二叉查找树的基本操作194
9.3.3查找性能分析198
9.4平衡二叉树198
9.4.1平衡二叉树的定义199
9.4.2平衡二叉树的建立199
9.5哈希表205
9.5.1哈希表的基本概念205
9.5.2哈希函数的构造206
9.5.3处理冲突的方法207
9.5.4查找性能分析208
9.6B树与B+树210
9.6.1B树210
9.6.2B+树216
9.7应用217
9.7.1直方图的计算217
9.7.2键树219
习题220
第10章排序223
10.1排序的基本概念223
10.1.1排序算法的分类224
10.1.2排序算法性能评价225
10.2插入排序226
10.2.1直接插入排序226
10.2.2折半插入排序228
10.2.3希尔(Shell)排序229
10.3选择排序230
10.3.1直接选择排序231
10.3.2堆排序232
10.4交换排序237
10.4.1冒泡排序237
10.4.2快速排序239
10.5归并排序242
10.6基数排序244
10.6.1多排序码排序244
10.6.2链式基数排序245
10.7各种内部排序算法的比较248
10.8外部排序250
10.8.1外部排序的基本过程250
10.8.2多路平衡归并252
10.8.3置换—选择排序254
10.8.4最佳归并树258
10.9应用260
10.9.1按文件名排序260
10.9.2数据库数据排序261
习题263
第11章算法进阶265
11.1分治算法265
11.1.1折半查找算法中的分治策略269
11.1.2归并排序中的分治策略270
11.2贪心算法271
11.2.1钱币找零问题中的贪心策略272
11.2.2背包问题中的贪心策略274
11.2.3最小生成树问题中的贪心策略275
11.3动态规划算法276
11.3.1最大子序列和问题的动态规划算法278
11.3.20/1背包问题的动态规划算法280
11.4搜索算法282
11.4.1回溯法282
11.4.2分支限界法285
习题287
