第1章 绪论 1
1.1 基本术语 1
1.2 数据结构的定义及研究的内容 2
1.2.1 数据的逻辑结构 2
1.2.2 数据的存储结构 5
1.2.3 数据的运算 7
1.3 算法 8
1.3.1 算法的概念及特性 8
1.3.2 算法的描述 8
1.3.3 算法的评价 13
1.4 学习数据结构的意义和目的 17
习题 18
第2章 线性表 19
2.1 线性表的定义及运算 19
2.1.1 线性表的定义及逻辑特征 19
2.1.2 线性表上运算的定义 20
2.1.3 线性表的存储结构 21
2.2 顺序表 21
2.2.1 顺序表的定义及表示 21
2.2.2 线性表运算在顺序表上的实现 23
2.2.3 顺序表应用举例 27
2.3 链表 34
2.3.1 链表的定义及形式 34
2.3.2 单链表 35
2.3.3 循环链表 49
2.3.4 双链表 50
2.3.5 静态链表 52
2.3.6 单链表的应用举例 54
2.4 顺序表和链表的比较 66
习题 67
第3章 栈和队列 68
3.1 栈 68
3.1.1 栈的定义及运算 68
3.1.2 顺序栈及运算的实现 69
3.1.3 链栈及运算的实现 71
3.1.4 栈的应用 72
3.1.5 栈与递归 75
3.2 队列 79
3.2.1 队列的定义及运算 79
3.2.2 顺序队列及运算的实现 80
3.2.3 链队列及运算的实现 83
3.3 栈与队列的比较 86
习题 87
第4章 多维数组及广义表 88
4.1 多维数组 88
4.2 矩阵的压缩存储 90
4.2.1 特殊矩阵 90
4.2.2 稀疏矩阵 94
4.3 广义表 99
4.3.1 广义表的定义 99
4.3.2 广义表的运算 100
习题 101
第5章 树 102
5.1 树的定义 102
5.2 二叉树 104
5.2.1 二叉树的定义及性质 105
5.2.2 二叉树的存储 108
5.2.3 二叉树的遍历及实现算法 112
5.3 线索二叉树 119
5.3.1 中序线索二叉树的定义 120
5.3.2 中序线索二叉树上遍历的实现 122
5.3.3 利用中序线索实现前序遍历和后序遍历 123
5.4 树和森林 127
5.4.1 树和森林的遍历 128
5.4.2 森林与二叉树的转换 128
5.4.3 树的存储 130
5.5 哈夫曼树 132
5.5.1 哈夫曼树的定义及建立 132
5.5.2 哈夫曼编码及译码 137
5.5.3 哈夫曼树应用举例 141
5.6 树与等价类问题 144
习题 147
第6章 图 149
6.1 图的概念 149
6.2 图的存储 153
6.2.1 邻接矩阵 154
6.2.2 邻接表 156
6.2.3 边集数组 159
6.3 图的遍历 160
6.3.1 深度优先搜索遍历 161
6.3.2 广度优先搜索遍历 164
6.3.3 非连通图的遍历 167
6.4 最小生成树 176
6.4.1 普里姆算法 177
6.4.2 克鲁斯卡尔算法 181
6.5 最短路径 183
6.5.1 单源最短路径 184
6.5.2 任意两点间最短路径 190
6.6 拓扑排序 192
6.7 关键路径 196
习题 201
第7章 排序 203
7.1 排序的基本概念 203
7.2 插入排序 205
7.2.1 直接插入排序 205
7.2.2 希尔排序 207
7.3 交换排序 209
7.3.1 起泡排序 209
7.3.2 快速排序 211
7.4 选择排序 214
7.4.1 直接选择排序 214
7.4.2 堆排序 215
7.5 归并排序 220
7.6 基数排序 223
7.7 内排序方法的比较 225
习题 226
第8章 查找 228
8.1 查找的基本概念 228
8.2 顺序表查找 229
8.2.1 顺序查找 229
8.2.2 二分查找 230
8.3 索引查找 234
8.3.1 索引表的组织 234
8.3.2 分块查找 236
8.4 树表查找 238
8.4.1 二叉排序树 238
8.4.2 平衡二叉排序树 244
8.4.3 B-树 251
8.5 散列表查找 256
8.5.1 散列表的概念 256
8.5.2 散列函数的设计 258
8.5.3 解决冲突的方法 259
8.5.4 散列表的应用举例 263
习题 269
参考文献 271