第1章 绪论 1
1.1 数据结构的重要性 1
1.2 基本概念和术语 5
1.2.1 基本概念 6
1.2.2 数据类型 8
1.3 算法 10
1.3.1 算法特性 11
1.3.2 算法描述 12
1.3.3 算法性能分析与度量 18
习题 20
第2章 线性表 22
2.1 线性表的逻辑结构 22
2.1.1 线性表的定义 22
2.1.2 线性表的基本操作 23
2.2 线性表的顺序存储结构 24
2.2.1 顺序表 24
2.2.2 顺序表上基本运算的实现 25
2.2.3 顺序表应用举例 33
2.3 线性表的链式存储结构 36
2.3.1 单链表 36
2.3.2 单链表上的基本操作 37
2.3.3 循环链表 44
2.3.4 双向链表及双向循环链表 44
2.3.5 链表应用举例 49
2.4 一元多项式的表示及相加 52
2.5 实训 56
习题 66
第3章 栈与队列 68
3.1 栈 68
3.1.1 栈的概念及相关操作 68
3.1.2 栈的顺序存储结构及其基本运算的实现 69
3.1.3 栈的链式存储结构及其基本运算的实现 75
3.2 队列 79
3.2.1 队列的概念和相关操作 79
3.2.2 队列的顺序存储结构及其基本运算的实现 80
3.2.3 队列的链式存储结构及其基本运算的实现 85
3.3 栈和队列的应用 89
3.3.1 栈的应用举例 89
3.3.2 队列的应用举例 96
3.4 实训 102
习题 118
第4章 串和数组 120
4.1 串的基本概念和存储结构 120
4.1.1 基本概念 120
4.1.2 基本运算 121
4.1.3 串的抽象数据类型描述 121
4.1.4 串的存储结构 122
4.2 串基本操作的实现 124
4.2.1 串基本操作 124
4.2.2 串的模式匹配算法 137
4.3 数组的定义和运算 140
4.3.1 数组的概念 140
4.3.2 数组的操作 141
4.4 数组顺序存储结构 141
4.4.1 行优先顺序 141
4.4.2 列优先顺序 141
4.4.3 基本操作在顺序存储上的实现 142
4.4.4 动态数组 144
4.5 矩阵的压缩存储 146
4.5.1 特殊矩阵 146
4.5.2 压缩存储 147
4.5.3 稀疏矩阵 149
4.5.4 广义表 157
4.6 实训 162
习题 168
第5章 树 171
5.1 树 171
5.1.1 树的定义 171
5.1.2 树的逻辑结构 173
5.1.3 树的表示 173
5.2 二叉树 174
5.2.1 二叉树的定义 174
5.2.2 二叉树的性质 176
5.2.3 二叉树的存储结构 177
5.3 二叉树的遍历 179
5.3.1 遍历的定义 179
5.3.2 遍历算法 181
5.3.3 遍历的应用 184
5.4 树和森林 186
5.4.1 树的存储结构 186
5.4.2 森林和二叉树的转换 188
5.4.3 数和森林的遍历 190
5.5 哈夫曼树及其应用 191
5.5.1 最优二叉树(哈夫曼树) 191
5.5.2 哈夫曼编码 193
5.6 实训 196
习题 210
第6章 图 212
6.1 图的定义及术语 212
6.1.1 图的定义 212
6.1.2 图的逻辑结构 215
6.2 图的存储结构 216
6.2.1 邻接矩阵表示法 216
6.2.2 邻接表 218
6.2.3 十字链表 220
6.2.4 邻接多重表 222
6.3 图的遍历 223
6.3.1 深度优先搜索 224
6.3.2 广度优先搜索 225
6.4 最小生成树 226
6.4.1 最小生成树 226
6.4.2 普里姆算法 227
6.4.3 克鲁斯卡尔算法 229
6.5 有向无环图及应用 230
6.5.1 拓扑排序 230
6.5.2 关键路径 233
6.6 最短路径 236
6.6.1 从一个源点到其他各点的最短路径 236
6.6.2 每一对顶点之间的最短路径 238
6.7 实训 240
习题 250
第7章 查找 252
7.1 静态查找 253
7.1.1 顺序表查找 253
7.1.2 二分查找 255
7.1.3 分块查找 258
7.2 动态查找 260
7.2.1 二叉排序树查找 260
7.2.2 二叉排序树的插入 262
7.2.3 二叉排序树的删除 263
7.3 哈希表 264
7.3.1 哈希表 264
7.3.2 哈希函数的构造方法 265
7.3.3 处理冲突的方法 268
7.4 实训 270
习题 275
第8章 排序 276
8.1 插入排序 277
8.1.1 直接插入排序 278
8.1.2 折半插入排序 280
8.1.3 希尔排序 281
8.1.4 应用举例 282
8.2 交换排序 283
8.2.1 冒泡排序 283
8.2.2 快速排序 285
8.3 选择排序 290
8.3.1 直接选择排序 291
8.3.2 树形选择排序 293
8.3.3 堆排序 295
8.3.4 应用举例 301
8.4 归并排序 304
8.4.1 两个有序序列的归并 304
8.4.2 2-路归并排序 305
8.4.3 应用举例 307
8.5 基数排序 308
8.5.1 多关键字排序 308
8.5.2 链式基数排序 311
8.5.3 应用举例 316
8.6 各种排序方法的比较和选择 316
8.6.1 排序方法的比较 316
8.6.2 各种内部排序方法的选择 317
8.7 实训 318
习题 322
参考文献 325