第1章 绪论 1
1.1 数据结构简介 1
1.2 基本术语 4
1.3 数据的存储结构 8
1.3.1 顺序存储结构 8
1.3.2 链式存储结构 9
1.4 算法及算法分析 10
1.4.1 算法 10
1.4.2 算法分析 15
1.5 数据结构课程的地位 16
1.5.1 数据结构与其他课程的关系 16
1.5.2 数据结构课程学习的特点 17
习题 17
第2章 线性表 18
2.1 线性表的逻辑结构 18
2.2 线性表的顺序存储结构 22
2.3 线性表的链式存储结构 28
2.3.1 线性单链表 29
2.3.2 静态单链表 36
2.3.3 循环链表 39
2.3.4 双向链表 41
2.4 线性表的应用 45
习题 54
实验 55
第3章 栈和队列 63
3.1 栈 63
3.1.1 栈的意义及抽象数据类型 63
3.1.2 栈操作的实现 64
3.2 队列 69
3.2.1 队列及其抽象数据类型 69
3.2.2 队列的链式存储结构 70
3.2.3 队列的顺序存储结构——循环队列 71
3.3 栈和队列的应用 74
习题 96
实验 97
第4章 串 103
4.1 串的基本概念和存储结构 103
4.1.1 串的基本概念 103
4.1.2 串的存储结构 105
4.2 串基本操作的实现 107
4.3 模式匹配 111
4.3.1 子串定位函数 111
4.3.2 模式匹配的一种改进算法 112
4.4 串操作应用 117
习题 121
实验 122
第5章 数组 125
5.1 数组的定义和运算 125
5.2 数组的顺序存储结构 127
5.3 矩阵的压缩存储 129
5.3.1 特殊矩阵 129
5.3.2 稀疏矩阵 131
5.3.3 稀疏矩阵操作实例 134
习题 139
实验 140
第6章 树与二叉树 145
6.1 树的逻辑结构和基本操作 145
6.2 二叉树 148
6.2.1 二叉树的定义及逻辑结构 148
6.2.2 二叉树的性质 149
6.2.3 二叉树的存储结构 151
6.3 遍历二叉树和线索二叉树 153
6.3.1 遍历二叉树 153
6.3.2 线索二叉树 162
6.4 树和森林 164
6.4.1 树的存储结构 164
6.4.2 森林与二叉树的转换 166
6.4.3 树的遍历 168
6.5 哈夫曼树及其应用 168
6.5.1 最优二叉树(哈夫曼树) 168
6.5.2 哈夫曼编码 171
习题 175
实验 177
第7章 图 184
7.1 图的定义与基本术语 184
7.1.1 图的定义 184
7.1.2 图的基本术语 185
7.2 图的存储 188
7.2.1 邻接矩阵表示法 188
7.2.2 邻接表表示法 191
7.2.3 十字链表 194
7.2.4 邻接多重表 195
7.3 图的遍历 198
7.3.1 深度优先搜索 198
7.3.2 广度优先搜索 201
7.4 图的连通性 203
7.4.1 无向图的连通分量与生成树 203
7.4.2 最小生成树 205
7.5 有向无环图及应用 216
7.5.1 拓扑排序(Topological Sort) 216
7.5.2 关键路径 219
7.6 最短路径 225
习题 231
实验 232
第8章 查找 237
8.1 查找的基本概念 237
8.2 基于线性表的查找 238
8.2.1 顺序查找 238
8.2.2 折半查找 240
8.2.3 分块查找 243
8.3 基于树的查找 247
8.3.1 二叉排序树 247
8.3.2 平衡二叉排序树 255
8.3.3 B树 262
8.3.4 静态树表的查找 271
8.4 哈希表 274
8.4.1 哈希表的概念 274
8.4.2 哈希函数的构造方法 276
8.4.3 处理冲突的方法 280
8.4.4 哈希表的实现 282
8.4.5 哈希表的查找分析 284
习题 286
实验 287
第9章 排序 294
9.1 概述 294
9.2 插入排序 296
9.2.1 直接插入排序 296
9.2.2 折半插入排序 300
9.2.3 二路插入排序 300
9.2.4 表插入排序 302
9.2.5 希尔排序 305
9.3 交换排序 307
9.3.1 冒泡排序 308
9.3.2 快速排序 309
9.4 选择排序 312
9.4.1 简单选择排序 312
9.4.2 堆排序 313
9.5 归并排序 318
9.6 基数排序 322
9.6.1 多关键字排序 322
9.6.2 基数排序 323
9.7 外部排序 326
9.7.1 二路归并排序 326
9.7.2 多路归并排序 327
9.7.3 初始顺串的生成 331
习题 332
实验 334
参考文献 340