第1章 绪论 1
1.1 引言 1
1.2 基本概念与术语 4
1.3 抽象数据类型 9
1.3.1 数据类型 9
1.3.2 抽象数据类型概述 10
1.4 算法和算法分析 11
1.4.1 算法的基本概念 11
1.4.2 算法的时间复杂度 14
1.4.3 算法的空间复杂度 16
本章小结 16
习题 17
第2章 线性表 19
2.1 线性表的定义及其基本操作 19
2.1.1 线性表的引例 19
2.1.2 线性表的定义 20
2.1.3 线性表的基本操作 20
2.2 线性表的顺序存储结构 20
2.2.1 顺序表结构 20
2.2.2 顺序表的基本操作 22
2.3 线性表的链式存储结构 26
2.3.1 链式存储结构 26
2.3.2 单链表上的基本运算 26
2.3.3 循环链表和双向链表 33
2.4 顺序表与链表的比较 36
2.5 线性表的应用 36
本章小结 43
习题 43
第3章 栈和队列 47
3.1 栈 47
3.1.1 栈的引例 47
3.1.2 栈的定义及基本操作 47
3.1.3 栈的顺序存储表示和操作的实现 48
3.1.4 栈的链式存储表示和操作的实现 51
3.2 栈的应用 53
3.3 队列 56
3.3.1 队列的引例 56
3.3.2 队列的定义及基本操作 56
3.3.3 队列的顺序存储表示和操作的实现 57
3.3.4 队列的链式存储表示和操作的实现 61
3.4 队列的应用 64
本章小结 66
习题 67
第4章 串 71
4.1 串的定义及基本操作 71
4.1.1 串的基本概念 71
4.1.2 串的基本操作 72
4.2 串的存储结构 73
4.2.1 串的顺序存储结构 73
4.2.2 串的堆式存储 78
4.2.3 串的块链式存储结构 81
4.3 串的应用 81
本章小结 84
习题 84
第5章 数组 86
5.1 数组的定义和运算 86
5.2 数组的顺序存储结构 87
5.3 矩阵的压缩存储结构 89
5.3.1 特殊矩阵 89
5.3.2 稀疏矩阵 91
5.4 广义表的定义 94
5.5 广义表的存储结构 95
5.5.1 头尾表示法 95
5.5.2 孩子兄弟表示法 96
5.6 数组的应用 97
本章小结 101
习题 101
第6章 树和二叉树 104
6.1 树的概念和基本操作 104
6.1.1 树的引例 104
6.1.2 树的定义和基本术语 104
6.1.3 树的基本操作 106
6.2 二叉树 107
6.2.1 二叉树的定义 107
6.2.2 二叉树的性质 107
6.2.3 二叉树的基本操作 109
6.3 二叉树的存储结构 110
6.3.1 顺序存储结构 110
6.3.2 链式存储结构 110
6.4 二叉树的遍历 112
6.4.1 先序遍历 112
6.4.2 中序遍历 113
6.4.3 后序遍历 113
6.4.4 层次遍历 114
6.5 线索二叉树 115
6.5.1 线索二叉树的概念 115
6.5.2 中序线索二叉树的构造算法 116
6.5.3 线索二叉树的遍历 117
6.6 哈夫曼树及其应用 119
6.6.1 哈夫曼树的定义 119
6.6.2 构造哈夫曼树 120
6.6.3 哈夫曼树的应用 122
6.7 树与森林 124
6.7.1 树的存储结构 124
6.7.2 树、森林与二叉树的转换 126
6.8 二叉树的应用 128
本章小结 131
习题 131
第7章 图 135
7.1 图的定义和术语 135
7.1.1 图的引例 135
7.1.2 图的定义 136
7.1.3 图的基本术语 136
7.2 图的存储结构 139
7.2.1 邻接矩阵 139
7.2.2 邻接链表 141
7.3 图的遍历 144
7.3.1 深度优先搜索 144
7.3.2 广度优先搜索 147
7.4 最小生成树 149
7.4.1 普里姆(Prim)算法 149
7.4.2 克鲁斯卡尔(Kruskal)算法 150
7.5 最短路径 151
7.5.1 单源最短路径 151
7.5.2 每一对顶点之间的最短路径 153
7.6 AOV网拓扑排序 157
7.6.1 AOV网 157
7.6.2 AOV网拓扑排序 158
7.7 图的应用 162
本章小结 166
习题 166
第8章 查找 170
8.1 基本概念 170
8.2 静态查找表 171
8.2.1 顺序查找 171
8.2.2 折半查找 173
8.2.3 分块查找 175
8.3 动态查找表 176
8.3.1 二叉排序树的概念 176
8.3.2 二叉排序树的查找 177
8.3.3 二叉排序树的插入和生成 178
8.3.4 二叉排序树的删除 179
8.3.5 二叉排序树查找算法效率分析 180
8.4 哈希表查找 181
8.4.1 哈希表的概念 181
8.4.2 哈希函数的构造方法 181
8.4.3 处理冲突的方法 182
8.4.4 哈希表的查找 184
8.5 查找的应用 185
本章小结 188
习题 189
第9章 排序 191
9.1 基本概念 191
9.2 插入排序 192
9.2.1 直接插入排序 192
9.2.2 希尔排序 194
9.3 交换排序 195
9.3.1 冒泡排序 195
9.3.2 快速排序 197
9.4 选择排序 200
9.4.1 直接选择排序 200
9.4.2 堆排序 201
9.5 归并排序 205
9.6 各种内部排序方法的比较 207
9.7 排序的应用 208
本章小结 210
习题 211
附录A 习题答案 213
附录B 数据结构实训及答案 233
参考文献 261