第1章 数据结构概论 1
1.1 引言 1
1.2 基本概念和常用术语 2
1.3 算法的描述和分析 5
1.3.1 算法描述 5
1.3.2 算法分析 6
实验1 求解鸡兔同笼问题 9
习题1 9
第2章 类和类模板基础 11
2.1 使用类和对象 11
2.1.1 使用对象和指针 11
2.1.2 new和delete运算符 13
2.2 类模板 14
2.3 友元函数和友元类 15
2.4 使用组合 18
2.5 应用实例 21
2.5.1 使用类求解一元二次方程 21
2.5.2 使用类模板和头文件求解一元二次方程 25
2.6 使用模板描述算法的优点和注意事项 27
实验2 多文件编程 28
习题2 28
第3章 线性表 30
3.1 线性表的类型定义 30
3.1.1 线性表的逻辑定义 30
3.1.2 线性表的抽象数据类型 30
3.2 线性表的顺序存储及基本运算 31
3.2.1 线性表的顺序存储 31
3.2.2 顺序表上基本运算的实现 32
3.2.3 顺序表运算应用实例 36
3.2.4 线性顺序表元素为结构的实例 37
3.3 线性表的链式存储结构 39
3.3.1 线性链表 39
3.3.2 单链表上的基本运算 40
3.3.3 单链表上的其他典型运算 46
3.3.4 双向链表 49
3.4 顺序表和链表的比较 53
实验3 实现一元多项式的加法运算 54
习题3 54
第4章 栈和队列 57
4.1 栈 57
4.1.1 栈的定义及抽象数据类型 57
4.1.2 栈的存储表示和实现 58
4.2 栈应用实例 63
4.2.1 圆括号匹配的检验 63
4.2.2 字符串回文的判断 63
4.2.3 数制转换 64
4.2.4 栈与递归 65
4.3 队列 67
4.3.1 抽象数据类型 68
4.3.2 顺序循环队列 68
4.3.3 链队列 73
4.4 栈和队列应用实例——表达式求值 77
4.4.1 中缀表达式到后缀表达式的转换 78
4.4.2 后缀表达式的计算 80
实验4 八皇后问题 82
习题4 82
第5章 字符串 86
5.1 串定义及其运算 86
5.1.1 串的基本概念 86
5.1.2 串的抽象数据类型 86
5.1.3 串的存储结构 87
5.2 串的顺序存储结构 87
5.2.1 顺序串的类型定义和常用算法 87
5.2.2 串基本运算的实现 88
5.2.3 串定位(模式匹配)运算 89
5.2.4 取子串运算(求子串) 90
5.2.5 连接字符串运算 90
5.2.6 演示字符串操作的实例 91
5.3 串的链式存储 91
5.4 串运算应用实例 92
实验5 串模式匹配算法 94
习题5 94
第6章 多维数组和广义表 96
6.1 多维数组和运算 96
6.1.1 数组的抽象数据类型 96
6.1.2 数组的顺序存储 97
6.1.3 矩阵类的定义和运算 97
6.2 矩阵的压缩存储 102
6.2.1 特殊矩阵 103
6.2.2 稀疏矩阵 107
6.3 广义表 110
6.3.1 广义表的定义 111
6.3.2 广义表的运算 111
6.4 运算符重载 112
6.4.1 重载对象的赋值运算符 112
6.4.2 运算符重载的实质 115
实验6 稀疏矩阵的加法运算 116
习题6 116
第7章 树和二叉树 118
7.1 树的基本概念和术语 118
7.2 二叉树 119
7.2.1 二叉树的定义和性质 119
7.2.2 二叉树的抽象数据类型 121
7.2.3 二叉树的存储结构 121
7.3 二叉树的运算 123
7.3.1 二叉树的生成 123
7.3.2 二叉树的递归遍历及其算法 124
7.3.3 二叉树递归遍历应用实例 127
7.3.4 非递归的按层遍历二叉链表 130
7.3.5 二叉树的非递归遍历算法 131
7.4 线索二叉树 133
7.4.1 二叉树的线索化 134
7.4.2 线索二叉链表上的运算 135
7.5 树和森林 137
7.5.1 树的存储结构 137
7.5.2 树、森林与二叉树的转换 139
7.5.3 树和森林的遍历 140
7.6 哈夫曼树及其应用 141
7.6.1 最优二叉树(哈夫曼树) 141
7.6.2 哈夫曼算法 143
7.6.3 哈夫曼算法的实现 143
7.6.4 哈夫曼编码 146
实验7 二叉树的遍历与查找算法 148
习题7 149
第8章 图 151
8.1 图的定义和基本术语 151
8.2 图的存储结构 153
8.2.1 邻接矩阵表示法 153
8.2.2 邻接表表示法 156
8.3 图的遍历 160
8.3.1 深度优先搜索 160
8.3.2 广度优先搜索 162
8.4 图的生成树和最小生成树 165
8.4.1 图的生成树 165
8.4.2 最小生成树 166
8.5 最短路径 172
8.6 拓扑排序 177
实验8 实现无向网络的最小生成树的普里姆算法 182
习题8 182
第9章 排序 184
9.1 基本概念 184
9.2 插入排序 185
9.2.1 直接插入排序 185
9.2.2 希尔排序 186
9.3 交换排序 187
9.3.1 冒泡排序 188
9.3.2 快速排序 189
9.4 选择排序 192
9.4.1 使用顺序表结构实现直接选择排序 193
9.4.2 使用链式存储结构实现直接选择排序 194
9.4.3 堆排序 196
9.5 归并排序 199
9.6 分配排序:基数排序 201
9.7 内部排序方法的分析比较 203
实验9 堆排序 204
习题9 204
第10章 查找 207
10.1 基本概念 207
10.2 顺序表的查找 207
10.2.1 顺序查找 208
10.2.2 二分查找 209
10.2.3 分块查找 212
10.2.4 三种查找方法的比较 213
10.3 树表的查找 213
10.3.1 二叉排序树 213
10.3.2 B树 217
10.3.3 B+树 221
10.4 散列表的查找 222
10.4.1 散列表的概念 222
10.4.2 散列函数的构造方法 223
10.4.3 处理冲突的方法 224
10.4.4 散列表查找 226
实验10 二叉排序树 231
习题10 231
第11章 文件 234
11.1 基本概念 234
11.2 顺序文件 235
11.3 索引文件 235
11.4 索引顺序文件 236
11.4.1 ISAM文件 236
11.4.2 VSAM文件 237
11.4.3 散列文件 237
11.5 多关键字文件 237
11.5.1 多重表文件 237
11.5.2 倒排文件 238
实验11 使用文件 239
习题11 240
附录A 考研指导 242
A.1 考纲要求 242
A.1.1 绪论 242
A.1.2 线性表 242
A.1.3 栈、队列和数组 243
A.1.4 树和二叉树 243
A.1.5 图 244
A.1.6 查找 244
A.1.7 排序 245
A.2 知识点、重难点解析 246
A.3 复习方法 247
A.4 考试技巧 248
A.4.1 单项选择题 248
A.4.2 算法设计题 249
A.5 实战真题练习 250
A.5.1 真题练习1 250
A.5.2 真题练习2 252
A.5.3 真题练习3 255
A.5.4 真题练习4 257
A.5.5 真题练习5 259
A.6 真题练习参考答案 261
A.6.1 真题1参考答案 261
A.6.2 真题2参考答案 263
A.6.3 真题3参考答案 264
A.6.4 真题4参考答案 267
A.6.5 真题5参考答案 269
附录B 七位ASCII代码表 271
参考文献 272