第1章 数据结构概述 1
1.1 数据的逻辑结构 1
1.1.1 数据及数据间的邻接关系 1
1.1.2 数据的逻辑结构 3
1.2 数据的存储结构 4
1.2.1 顺序式存储结构 5
1.2.2 链式存储结构 5
1.3 算法及算法分析 6
1.3.1 算法及算法的描述 7
1.3.2 算法分析 11
小结 14
习题 15
第2章 线性表 17
2.1 线性表的基本知识 17
2.2 线性表的顺序存储实现 18
2.2.1 顺序表 18
2.2.2 顺序表的基本算法描述 19
2.3 线性表的链式存储实现 27
2.3.1 单链表 27
2.3.2 单链表的基本算法描述 28
2.4 链式存储的推广 35
2.4.1 双链表 35
2.4.2 循环链表 39
小结 45
习题 46
第3章 堆栈与队列 50
3.1 堆栈 50
3.1.1 堆栈的基本知识 50
3.1.2 堆栈的顺序存储实现 52
3.1.3 堆栈的链式存储实现 57
3.2 队列 60
3.2.1 队列的基本知识 60
3.2.2 队列的顺序存储实现 61
3.2.3 循环队列的顺序存储实现 66
3.2.4 队列的链式存储实现 71
3.3 栈与队列的实际应用 76
3.3.1 在算术表达式求值中使用堆栈 76
3.3.2 堆栈与函数递归调用 79
小结 82
习题 83
第4章 串、数组、矩阵 87
4.1 串 87
4.1.1 串的基本知识 87
4.1.2 串的顺序存储实现 88
4.1.3 串的链式存储实现 101
4.2 数组 109
4.2.1 数组简介 109
4.2.2 数组的顺序存储 110
4.3 特殊矩阵及稀疏矩阵 113
4.3.1 特殊矩阵 113
4.3.2 稀疏矩阵 118
小结 126
习题 126
第5章 二叉树 130
5.1 二叉树概述 130
5.1.1 二叉树的基本概念 130
5.1.2 二叉树的性质 134
5.2 二叉树的存储结构 136
5.2.1 二叉树的顺序存储结构 137
5.2.2 二叉树的链式存储结构 138
5.3 遍历二叉树 141
5.3.1 遍历二叉树的含义 141
5.3.2 遍历二叉树的实现 145
5.4 哈夫曼树及哈夫曼编码 153
5.4.1 编码概述 153
5.4.2 哈夫曼树的构造方法 155
5.4.3 哈夫曼树在编码中的应用 159
小结 166
习题 166
第6章 树与森林 169
6.1 树的概述 169
6.1.1 树的定义及特性 169
6.1.2 有关树的常用术语 171
6.2 树、森林和二叉树间的转换 173
6.2.1 树、森林转换到二叉树 174
6.2.2 二叉树转换到树、森林 176
6.3 树的存储结构 177
6.4 树的遍历 181
6.5 判定树 186
小结 189
习题 189
第7章 图 193
7.1 图的概述 193
7.1.1 图的定义 193
7.1.2 有关图的常用术语 194
7.2 图的存储结构 198
7.2.1 邻接矩阵 198
7.2.2 邻接表 200
7.3 图的遍历 203
7.3.1 图的深度优先搜索 203
7.3.2 广度优先搜索 206
7.4 生成树与最小生成树 208
7.4.1 生成树与最小生成树的概念 208
7.4.2 构造最小生成树的算法 209
7.5 最短路径 212
7.5.1 单源最短路径 213
7.5.2 每对顶点间的最短路径 214
7.6 拓扑排序 216
小结 219
习题 219
第8章 查找 223
8.1 查找的基本概念 223
8.2 静态查找算法 224
8.2.1 折半查找 224
8.2.2 分块查找 229
8.3 二叉查找树的动态查找 232
8.3.1 二叉查找树及查找算法 232
8.3.2 二叉查找树的插入与删除 234
8.4 散列及散列表的动态查找 240
8.4.1 散列的概念 240
8.4.2 常用散列函数的构造方法 241
8.4.3 冲突的处理 243
小结 247
习题 248
第9章 排序 251
9.1 排序的基本概念 251
9.2 插入排序 252
9.2.1 直接插入排序 252
9.2.2 折半插入排序 256
9.2.3 表插入排序 257
9.3 交换排序 260
9.3.1 冒泡排序 260
9.3.2 快速排序 263
9.4 选择排序 267
9.4.1 直接选择排序 267
9.4.2 堆排序 269
小结 275
习题 275
参考文献 278