第1章 绪论 1
1.1 基本概念 1
1.1.1 数据和数据结构 1
1.1.2 数据类型 3
1.1.3 抽象数据类型 3
1.1.4 数据结构的符号描述举例 4
1.2 算法和算法描述 5
1.2.1 概念和特性 5
1.2.2 算法设计要求 5
1.2.3 算法描述 6
1.3 算法的性能分析 7
1.3.1 时间复杂度 7
1.3.2 空间复杂度 9
1.3.3 分析算法时间复杂度举例 9
1.4 习题 10
第2章 线性表 12
2.1 线性表的含义及ADT描述 12
2.2 顺序存储结构 14
2.2.1 顺序表的存储表示 14
2.2.2 顺序表的基本操作的实现 16
2.2.3 顺序表的基本操作的时间复杂度分析 21
2.2.4 顺序表的优缺点 21
2.2.5 顺序存储结构的应用 21
2.3 链式存储结构 23
2.3.1 单链表的存储表示 23
2.3.2 单链表基本操作的实现 25
2.3.3 循环链表的表示和基本操作的实现 32
2.3.4 双向链表的表示和基本操作的实现 34
2.3.5 链式存储结构的应用 36
2.4 习题 41
第3章 栈和队列 43
3.1 栈 43
3.1.1 栈的定义及ADT描述 43
3.1.2 栈的顺序存储结构 44
3.1.3 栈的链式存储结构 48
3.1.4 栈的应用 51
3.2 队列 54
3.2.1 队列的定义及ADT描述 54
3.2.2 队列的顺序存储结构 55
3.2.3 队列的链式存储结构 58
3.2.4 队列的应用 60
3.3 习题 65
第4章 串和数组 68
4.1 串 68
4.1.1 串的定义及ADT描述 68
4.1.2 串的顺序存储结构 69
4.1.3 串的链式存储结构 72
4.1.4 串的应用举例 73
4.2 数组 76
4.2.1 数组的定义及ADT描述 76
4.2.2 数组的存储结构 78
4.2.3 矩阵的压缩存储 81
4.2.4 矩阵转置 90
4.2.5 数组的应用举例 92
4.3 习题 99
第5章 树和二叉树 101
5.1 树 101
5.1.1 树的概念及ADT描述 101
5.1.2 树的存储结构 103
5.1.3 综合应用举例 106
5.2 二叉树 108
5.2.1 二叉树的概念及ADT描述 108
5.2.2 二叉树的性质 109
5.2.3 二叉树的存储结构 113
5.2.4 遍历二叉树 116
5.2.5 遍历算法的应用 118
5.2.6 树、森林与二叉树的转换 121
5.2.7 二叉树的综合应用 125
5.3 树和森林的遍历 129
5.3.1 树的遍历 129
5.3.2 森林的遍历 129
5.3.3 树和森林的遍历应用 130
5.4 哈夫曼树及应用 130
5.4.1 哈夫曼树 130
5.4.2 判定树 133
5.4.3 前缀编码 133
5.5 习题 135
第6章 图 137
6.1 图的概述 137
6.1.1 图的概念 137
6.1.2 图的ADT描述 140
6.2 图的存储结构 141
6.2.1 邻接矩阵 141
6.2.2 邻接表 144
6.2.3 应用举例 151
6.3 图的遍历 152
6.3.1 深度优先遍历 152
6.3.2 广度优先遍历 153
6.3.3 应用举例 154
6.4 最小生成树问题 154
6.4.1 图的生成树和最小生成树 154
6.4.2 构造最小生成树 155
6.4.3 应用举例 159
6.5 有向无环图及应用 160
6.5.1 基本定义 160
6.5.2 拓扑排序 161
6.5.3 关键路径 165
6.6 习题 168
第7章 查找 171
7.1 基本概念 171
7.2 静态查找 172
7.2.1 顺序查找 172
7.2.2 折半查找 174
7.2.3 折半查找应用举例 177
7.3 动态查找 178
7.3.1 二叉排序树 178
7.3.2 二叉排序树的查找 178
7.3.3 二叉排序树的插入 179
7.3.4 二叉排序树的删除 182
7.3.5 二叉排序树的应用举例 184
7.4 哈希表 185
7.4.1 哈希表的概念 185
7.4.2 哈希函数的构造 186
7.4.3 冲突处理的方法 188
7.4.4 哈希表查找及其分析 191
7.4.5 哈希表查找应用举例 192
7.5 习题 194
第8章 排序 195
8.1 基本概念 195
8.2 插入排序 197
8.2.1 直接插入排序 197
8.2.2 希尔排序 199
8.2.3 应用举例 201
8.3 交换排序 202
8.3.1 冒泡排序 202
8.3.2 快速排序 204
8.3.3 应用举例 208
8.4 选择排序 209
8.4.1 简单选择排序 209
8.4.2 堆排序 211
8.4.3 应用举例 214
8.5 归并排序 216
8.5.1 归并排序的基本思想 216
8.5.2 2-路归并排序算法 217
8.5.3 应用举例 219
8.6 基数排序 219
8.6.1 基数排序的基本思想 219
8.6.2 链式基数排序算法 222
8.6.3 应用举例 224
8.6.4 排序方法简单比较 224
8.7 习题 225
参考文献 226