第一章 绪论 1
1.1 为什么要学习数据结构 1
1.2 基本概念和术语 2
1.3 算法描述 3
1.4 算法分析 4
习题 6
第二章 线性表 8
2.1 线性表的概念 8
2.2 顺序表 10
2.2.1 顺序表的定义和特点 10
2.2.2 顺序表的存储及其操作 10
2.2.3 顺序表的性能分析 19
2.3 单链表 21
2.3.1 单链表 21
2.3.2 单链表的操作 23
2.4 循环链表 29
2.5 双向链表 30
2.6 链表的应用:多项式及其运算 32
2.6.1 多项式的表示 32
2.6.2 多项式的加法 33
习题 37
第三章 堆栈和队列 39
3.1 堆栈的定义 39
3.2 堆栈的表示和实现 40
3.3 堆栈的应用 41
3.3.1 数制转换 42
3.3.2 括弧匹配检验 42
3.3.3 迷宫问题 44
3.3.4 表达式求解问题 48
3.4 堆栈与递归 55
3.4.1 递归 55
3.4.2 递归与非递归的转换 59
3.5 队列 62
3.6 循环队列 63
3.7 队列的应用 65
习题 69
第四章 数组和串 71
4.1 数组的类型定义和基本运算 71
4.2 数组的存储结构 72
4.3 特殊矩阵的压缩存储 72
4.3.1 对称矩阵 73
4.3.2 三角矩阵 74
4.3.3 对角矩阵 74
4.3.4 稀疏矩阵 75
4.4 广义表 83
4.4.1 广义表(Lists,又称列表)是线性表的推广 83
4.4.2 广义表的存储结构和操作 84
4.5 串 87
4.5.1 串的定义 87
4.5.2 串的顺序存储结构 88
4.5.3 串的模式匹配算法 88
习题 93
第五章 树和二叉树 94
5.1 树 94
5.1.1 树的定义和基本术语 94
5.1.2 树的表示方法 97
5.1.3 树的抽象数据类型 98
5.1.4 树的存储结构 100
5.2 二叉树 105
5.2.1 二叉树(Binary Tree)的定义 105
5.2.2 二叉树的两种特殊形态 106
5.2.3 二叉树的性质 107
5.2.4 二叉树的抽象数据类型 109
5.2.5 二叉树的存储结构 110
5.2.6 二叉树的二叉链存储结构的实现及操作 114
5.3 二叉树的遍历 119
5.3.1 二叉树的基本遍历方法 119
5.3.2 二叉树的层次遍历方法 122
5.4 线索二叉树 124
5.5 二叉树、树和森林 128
5.5.1 树和二叉树的转换 128
5.5.2 森林和二叉树的转换 129
5.6 树的应用 130
5.6.1 哈夫曼树(Huffman) 130
5.6.2 哈夫曼树的构造 131
5.6.3 哈夫曼树的应用 132
5.6.4 哈夫曼树的编码问题设计与实现 133
习题 137
第六章 图 139
6.1 图 139
6.1.1 图的基本术语 139
6.1.2 图的抽象数据类型ADT 142
6.2 图的存储结构 143
6.2.1 邻接矩阵存储结构 143
6.2.2 邻接表存储结构 144
6.2.3 十字链表存储结构 146
6.2.4 邻接多重表存储结构 147
6.3 图的实现 149
6.3.1 基于邻接矩阵的图基本操作实现 149
6.3.2 基于邻接表的图基本操作实现 154
6.4 图的遍历 161
6.4.1 深度优先搜索 161
6.4.2 广度优先搜索 164
6.4.3 连通分量 166
6.5 最小生成树 167
6.5.1 基本概念 167
6.5.2 Kruskal算法 168
6.5.3 Prim算法 170
6.5.4 最小生成树应用 171
6.6 最短路径 174
6.6.1 从某个源点到其他各顶点的最短路径 174
6.6.2 每一对顶点之间的最短路径 177
6.7 有向无环图及其应用 179
6.7.1 基本概念 179
6.7.2 AOV网和拓扑排序 180
6.7.3 AOV网应用及实现 182
6.7.4 AOE网和关键路径 184
6.7.5 关键路径应用和实现 188
习题 192
第七章 查找 195
7.1 查找的基本概念 195
7.2 静态查找表 196
7.2.1 顺序表的查找 196
7.2.2 有序表的查找 197
7.2.3 索引顺序表的查找 200
7.3 动态查找表 202
7.3.1 二叉查找树(二叉排序树) 202
7.3.2 平衡二叉树 205
7.4 哈希表 214
7.4.1 基本概念 214
7.4.2 哈希函数构造方法 214
7.4.3 处理冲突的方法 215
7.4.4 哈希表的查找及分析 219
习题 219
第八章 排序 221
8.1 排序的基本概念 221
8.2 插入排序(insertion sort) 221
8.2.1 直接插入排序 221
8.2.2 希尔排序(Shell sort) 223
8.3 选择排序(selection sort) 225
8.3.1 简单选择排序 225
8.3.2 堆排序 226
8.4 交换排序 229
8.4.1 冒泡排序(bubble sort) 229
8.4.2 快速排序(quick sort) 231
8.5 归并排序(merge sort) 232
8.6 基数排序(radix sort) 236
8.6.1 多关键字排序 236
8.6.2 链式基数排序 237
8.7 性能比较 240
习题 241
第九章 文件 242
9.1 有关文件的基本概念 242
9.1.1 文件概念 242
9.1.2 文件分类 242
9.2 文件的逻辑结构及物理结构 243
9.2.1 文件的逻辑结构及操作 243
9.2.1 文件的存储结构(亦称物理结构) 244
9.3 顺序文件 244
9.4 索引文件 245
9.5 ISAM文件和VSAM文件 246
9.5.1 ISAM文件 246
9.5.2 VSAM文件 249
9.6 散列文件 252
习题 252