序 1
第1章 绪论 1
本章学习目标 1
1.1 什么是数据结构 1
1.1.1 数据结构示例 1
1.1.2 基本概念和术语 4
1.1.3 数据结构(Data Structure) 5
1.2 算法描述 8
1.2.1 算法 8
1.2.2 算法描述 8
1.3.2 算法效率的度量 9
1.3.1 算法设计的要求 9
1.3 算法分析与评价 9
本章小结 11
习题 12
第2章 线性表 15
本章学习目标 15
2.1 线性表的基本概念 15
2.1.1 线性表的定义 15
2.1.2 线性表的基本运算 16
2.2 线性表的顺序结构及运算实现 17
2.2.1 线性表的顺序存储结构 17
2.2.2 线性表在顺序存储结构下的运算实现 19
2.3.1 链表的存储结构 24
2.3 线性表的链式存储和运算实现 24
2.3.2 单向链表 26
2.3.3 循环链表 32
2.3.4 双向链表 33
2.3.5 循环双链表 36
2.3.6 静态链表 37
2.4 线性表的应用——一元多项式计算 38
2.4.1 一元多项式表示 38
2.4.2 一元多项式相加 38
2.5 顺序表和链表的比较 40
本章小结 41
习题 41
3.1 栈 45
3.1.1 栈的定义和运算 45
第3章 栈和队列 45
本章学习目标 45
3.1.2 栈的顺序存储结构及其基本运算的实现 46
3.1.3 栈的链式存储结构及其基本运算的实现 50
3.2 栈的应用 52
3.2.1 中缀表达式 52
3.2.2 中缀表达式转换为等价的后缀表达式 57
3.2.3 后缀表达式及其求值 58
3.3 栈与递归 59
3.3.1 递归与递归程序的设计 59
3.3.2 递归程序执行过程的分析 60
3.3.3 递归的应用举例 62
3.4.1 队列的定义和运算 65
3.4.2 队列的顺序存储结构及其基本运算的实现 65
3.4 队列 65
3.4.3 队列的链式存储结构及其基本运算的实现 68
3.4.4 队列应用举例 70
本章小结 73
习题 73
4.1 串及其运算 78
4.1.1 串的逻辑结构 78
4.1.2 串的基本运算 78
本章学习目标 78
第4章 串 78
4.2 串的存储结构 80
4.2.1 串的顺序存储结构及其基本运算的实现 80
4.2.2 串的链式存储结构及其基本运算的实现 82
4.2.3 串的堆分配存储结构及其基本运算的实现 85
4.3 串的模式匹配 86
4.3.1 Brute-Force算法 86
4.3.2 KMP算法 88
4.4 串的应用 90
本章小结 91
习题 92
5.1.1 数组的定义 94
5.1 数组 94
本章学习目标 94
第5章 数组和广义表 94
5.1.2 数组的基本操作 95
5.1.3 数组的存储结构 96
5.2 矩阵的压缩存储 98
5.2.1 特殊矩阵的压缩存储方法 98
5.2.2 稀疏矩阵的压缩存储方法 100
5.3 广义表 109
5.3.1 广义表的定义 109
5.3.2 广义表的存储结构 111
5.3.3 广义表的基本操作 112
本章小结 116
习题 117
第6章 树和二叉树 123
本章学习目标 123
6.1 树的逻辑结构和存储结构 123
6.1.1 树型结构实例 123
6.1.2 树的定义和基本运算 124
6.1.3 树的表示 127
6.1.4 树的存储结构 127
6.1.5 树和森林的遍历 130
6.2 二叉树 132
6.2.1 二叉树的定义与性质 132
6.2.2 二叉树的存储结构 135
6.2.3 二叉树的基本运算及实现 137
6.3.1 遍历二叉树 140
6.3 遍历二叉树和线索二叉树 140
6.3.2 线索二叉树 144
6.4 树、森林与二叉树的转换 147
6.5 二叉树的应用 149
6.5.1 二叉排序树 149
6.5.2 路径长度和哈夫曼树 149
6.5.3 构造哈夫曼树 152
本章小结 158
习题 159
7.1 图及其基本运算 166
7.1.1 图的定义 166
本章学习目标 166
第7章 图 166
7.1.2 图的基本术语 167
7.1.3 图的基本运算 169
7.2 图的存储结构 169
7.2.1 邻接矩阵 169
7.2.2 邻接表 171
7.2.3 十字链表 172
7.2.4 邻接多重表 173
7.3 图的遍历 174
7.3.1 深度优先搜索(DFS) 175
7.3.2 广度优先搜索(BFS) 177
7.4 最小生成树 179
7.4.1 克鲁斯卡尔(Kruskal)算法 180
7.4.2 普里姆(Prim)算法 181
7.5 最短路径 184
7.5.1 求一顶点到其余顶点的最短路径 184
7.5.2 每对顶点之间的最短路径 188
7.6 拓扑排序 191
7.7 关键路径 195
本章小结 199
习题 200
第8章 排序 204
本章学习目标 204
8.1 排序的基本概念 204
8.1.1 排序及其分类 204
8.2 插入排序 205
8.1.2 排序算法的效率分析 205
8.2.1 直接插入排序 206
8.2.2 折半插入排序 208
8.2.3 希尔排序 209
8.3 交换排序 211
8.3.1 冒泡排序 211
8.3.2 快速排序 213
8.4 选择排序 217
8.4.1 简单选择排序 217
8.4.2 堆排序 218
8.5 归并排序 223
8.6 基数排序 226
8.7.1 外部排序过程 229
8.7 外部排序 229
8.7.2 多路平衡归并 230
8.7.3 置换一选择排序 231
8.8 各种排序方法的比较 232
本章小结 234
习题 235
第9章 查找 241
本章学习目标 241
9.1 基本概念 241
9.2 顺序表的静态查找 242
9.2.1 简单顺序查找 242
9.2.2 二分查找 243
9.2.3 分块查找 245
9.3.1 二叉排序树 247
9.3 树表的动态查找 247
9.3.2 平衡二叉树 253
9.3.3 B-树 257
9.4 散列表查找 261
9.4.1 什么是散列表 262
9.4.2 散列函数的构造方法 262
9.4.3 冲突的解决方法 264
9.4.4 散列表的查找及性能分析 267
9.4.5 有关散列表的算法 269
本章小结 271
习题 272
10.1.1 文件的基本概念 276
10.1 文件的基本概念 276
第10章 文件 276
本章学习目标 276
10.1.2 文件的逻辑结构 277
10.1.3 文件的物理结构 277
10.1.4 文件的操作 277
10.2 顺序文件 278
10.2.1 存储在顺序存储器上的顺序文件 278
10.2.2 存储在直接存储器上的顺序文件 279
10.3 索引文件 279
10.4.1 索引顺序文件的特点 280
10.4.2 VSAM文件的组织方法 280
10.4 索引顺序文件 280
10.5 散列文件 281
10.5.1 散列文件的组织方式 281
10.5.2 散列文件的操作 281
10.6 多关键字文件 282
10.6.1 多关键字文件概念 282
10.6.2 倒排文件 283
10.6.3 多重表文件 283
10.6.4 多关键字文件和其他文件的区别 284
本章小结 284
习题 284
参考文献 287