第1章 概论 1
1.1 “数据结构”的研究内容 2
1.1.1 用计算机解决实际问题的过程 2
1.1.2 学习“数据结构”的意义 4
1.2 基本术语 5
1.3 算法描述及分析 6
1.3.1 算法描述语言概述 6
1.3.2 算法分析 8
本章小结 9
习题1 10
第2章 线性表 11
2.1 线性表的定义和运算 12
2.1.1 线性表的定义 12
2.1.2 线性表的运算 12
2.2 线性表的顺序表存储结构 13
2.2.1 顺序存储结构 13
2.2.2 顺序表运算的实现 14
2.2.3 顺序表的应用 17
2.3 链表 20
2.3.1 链表结构 21
2.3.2 链表运算的实现 24
2.3.3 其他形式的链表结构 33
2.4 串 37
2.4.1 串的定义和运算 37
2.4.2 串的存储 38
本章小结 39
习题2 40
第3章 栈、队列和数组 42
3.1 栈 43
3.1.1 栈的定义和运算 43
3.1.2 顺序栈 44
3.1.3 链栈 46
3.1.4 栈的应用实例 46
3.2 队列 51
3.2.1 队列的定义和运算 51
3.2.2 顺序队列与循环队列 52
3.2.3 链队列 55
3.2.4 队列的应用 57
3.3 数组 58
3.3.1 数组的定义和运算 58
3.3.2 数组的顺序存储 59
3.3.3 矩阵的压缩存储 61
3.4 栈的应用——栈和递归 63
3.4.1 递归程序的定义及其基本形式 64
3.4.2 递归调用的内部实现原理 66
3.4.3 递归程序的阅读 70
3.4.4 递归程序的正确性证明和编写 74
3.4.5 递归的模拟 77
本章小结 86
习题3 87
第4章 树 93
4.1 树 94
4.2 二叉树 96
4.2.1 二叉树的基本概念 96
4.2.2 二叉树的性质 97
4.2.3 二叉树的存储结构 99
4.3 二叉树的遍历 101
4.3.1 遍历算法的实现 101
4.3.2 二叉树遍历算法的应用 106
4.4 线索二叉树 108
4.4.1 线索二叉树结构 108
4.4.2 线索二叉树中前驱和后继的求解 109
4.5 树和森林 112
4.5.1 树的存储结构 112
4.5.2 树(森林)与二叉树的转换 116
4.5.3 树(森林)的遍历 118
4.6 哈夫曼树 119
4.6.1 问题描述及求解方法 121
4.6.2 应用实例 123
本章小结 124
习题4 125
第5章 图 129
5.1 基本概念 130
5.2 图的存储结构 132
5.2.1 邻接矩阵表示 132
5.2.2 邻接表表示 133
5.3 图的遍历算法及其应用 134
5.3.1 深度优先搜索遍历算法及其应用 135
5.3.2 广度优先搜索遍历算法及其应用 140
5.4 最小生成树 145
5.4.1 Prim算法 145
5.4.2 Kruskal算法 150
5.5 有向无环图 152
5.5.1 拓扑排序 153
5.5.2 关键路径 156
5.6 最短路径 160
5.6.1 从单个顶点到其余各顶点之间的最短路径 160
5.6.2 各顶点之间的最短路径 165
本章小结 168
习题5 169
第6章 查找 172
6.1 概述 173
6.2 顺序表的查找 174
6.2.1 简单顺序查找 174
6.2.2 有序表的二分查找 175
6.2.3 索引顺序表的查找 178
6.3 树表的查找(二叉排序树的查找) 179
6.3.1 二叉排序树及其查找 180
6.3.2 平衡二叉树 183
6.4 散列表的查找 189
6.4.1 散列表的基本概念 189
6.4.2 散列函数的构造方法 189
6.4.3 处理冲突的方法 190
6.4.4 散列表的查找 193
本章小结 193
习题6 194
第7章 排序 196
7.1 概述 197
7.1.1 排序及其分类 197
7.1.2 排序算法的指标分析 198
7.2 插入排序 198
7.2.1 直接插入排序 198
7.2.2 希尔排序 200
7.3 交换排序 202
7.3.1 冒泡排序 202
7.3.2 快速排序 204
7.4 选择排序 207
7.4.1 直接选择排序 208
7.4.2 堆排序 209
7.5 归并排序 214
7.5.1 归并 214
7.5.2 归并排序 215
本章小结 215
习题7 216
第8章 文件 218
8.1 概述 219
8.2 常见文件组织形式 220
8.2.1 顺序文件 220
8.2.2 索引文件 221
8.2.3 ISAM文件 221
8.2.4 VSAM文件 221
8.2.5 散列文件 222
8.2.6 多关键字文件 222
本章小结 222
习题8 222
参考文献 223