目录 1
第0章 预备知识 1
0.1 数学预备知识 1
0.1.1 常用数学术语 1
0.1.2 对数 1
0.1.3 级数求和 2
0.2 常用数学证明方法 3
0.2.1 反证法 3
0.2.2 数学归纳法 3
0.3.1 集合 4
0.3 离散数学预备知识 4
0.3.2 谓词 6
0.3.3 关系 6
0.4 C++程序设计语言预备知识 7
0.4.1 程序结构 7
0.4.2 变量、常量与数据类型 8
0.4.3 控制语句 13
0.4.4 函数 14
0.4.5 继承与派生 19
0.4.6 多态与虚函数 20
0.4.7 模板 21
0.4.8 动态存储分配 22
0.4.10 异常处理 23
0.4.9 输入与输出 23
第1章 绪论 27
1.1 数据结构的兴起和发展 27
1.2 数据结构的研究对象 29
1.3 数据结构的基本概念 31
1.3.1 数据结构 31
1.3.2 数据结构的访问接口 33
1.3.3 抽象数据类型 33
1.4 算法及算法分析 35
1.4.1 算法 35
1.4.2 算法分析 38
1.5 案例综述 42
习题1 45
思考题1 47
第2章 线性表 49
2.1 线性表的逻辑结构 49
2.1.1 线性表的定义 49
2.1.2 线性表的抽象数据类型定义 50
2.2 线性表的顺序存储结构及实现 51
2.2.1 线性表的顺序存储结构——顺序表 51
2.2.2 顺序表的实现 52
2.3 线性表的链接存储结构及实现 57
2.3.1 线性表的链接存储结构——单链表 58
2.3.2 单链表的实现 59
2.4.1 时间性能比较 66
2.4.2 空间性能比较 66
2.4 顺序表和单链表的比较 66
2.5 线性表的其他存储方法 67
2.5.1 循环链表 67
2.5.2 双链表 68
2.5.3 静态链表 69
2.5.4 间接寻址 70
2.6 应用举例 71
2.6.1 顺序表的应用举例——符号表 71
2.6.2 单链表的应用举例——一元多项式求和 72
2.6.3 高校学籍管理 75
习题2 76
思考题2 79
第3章 特殊线性表——栈、队列和串 81
3.1 栈 81
3.1.1 栈的逻辑结构 81
3.1.2 栈的顺序存储结构及实现 83
3.1.3 栈的链接存储结构及实现 88
3.1.4 顺序栈和链栈的比较 89
3.2 队列 90
3.2.1 队列的逻辑结构 90
3.2.2 队列的顺序存储结构及实现 91
3.2.3 队列的链接存储结构及实现 94
3.3 串 97
3.3.1 串的逻辑结构 97
3.2.4 循环队列和链队列的比较 97
3.3.2 串的存储结构 99
3.3.3 模式匹配 100
3.4 应用举例 104
3.4.1 栈的应用举例——递归 104
3.4.2 队列的应用举例——火车车厢重排 107
3.4.3 串的应用举例——恺撒密码 109
3.4.4 高校实验任务安排问题 110
习题3 111
思考题3 113
4.1 多维数组 115
4.1.1 数组的定义 115
第4章 广义线性表——多维数组和广义表 115
4.1.2 数组的存储结构与寻址 117
4.2 矩阵的压缩存储 118
4.2.1 特殊矩阵的压缩存储 119
4.2.2 稀疏矩阵的压缩存储 121
4.3 广义表 127
4.3.1 广义表的逻辑结构 127
4.3.2 广义表的存储结构及实现 129
4.4 应用举例 132
4.4.1 数组的应用举例——魔方阵 132
4.4.2 本科生选导师问题 134
习题4 .. 135
思考题4 137
5.1 树的逻辑结构 139
5.1.1 树的定义和基本术语 139
第5章 树和二叉树 139
5.1.2 树的抽象数据类型定义 142
5.1.3 树的遍历操作 143
5.2 树的存储结构 144
5.2.1 双亲表示法 144
5.2.2 孩子表示法 145
5.2.3 双亲孩子表示法 147
5.2.4 孩子兄弟表示法 147
5.3 二叉树的逻辑结构 148
5.3.1 二叉树的定义 148
5.3.2 二叉树的基本性质 150
5.3.3 二叉树的抽象数据类型定义 153
5.3.4 二叉树的遍历操作 154
5.4 二叉树的存储结构及实现 156
5.4.1 顺序存储结构 156
5.4.2 二叉链表 157
5.4.3 三叉链表 166
5.4.4 线索链表 167
5.5 树、森林与二叉树的转换 171
5.6 应用举例 175
5.6.1 二叉树的应用举例——哈夫曼树及哈夫曼编码 175
5.6.2 树的应用举例——8枚硬币问题 179
5.6.3 高校学生会组织机构的管理 180
习题5 182
思考题5 184
6.1 图的逻辑结构 185
6.1.1 图的定义和基本术语 185
第6章 图 185
6.1.2 图的抽象数据类型定义 189
6.1.3 图的遍历操作 191
6.2 图的存储结构及实现 194
6.2.1 邻接矩阵 194
6.2.2 邻接表 197
6.2.3 十字链表 202
6.2.4 邻接多重表 202
6.2.5 边集数组 203
6.2.6 图的存储结构的比较 204
6.3.2 有向图的连通性 205
6.3 图的连通性 205
6.3.1 无向图的连通性 205
6.3.3 生成树和生成森林 206
6.4 应用举例 206
6.4.1 最小生成树 206
6.4.2 最短路径 211
6.4.3 AOV网与拓扑排序 216
6.4.4 AOE网与关键路径 220
6.4.5 校园最短路径问题 223
习题6 224
思考题6 227
7.1.1 查找的基本概念 229
7.1 概述 229
第7章 查找技术 229
7.1.2 查找算法的性能 230
7.2 线性表的查找技术 231
7.2.1 顺序查找 231
7.2.2 折半查找 233
7.2.3 斐波那契查找 236
7.2.4 插值查找 237
7.3 树表的查找技术 238
7.3.1 二叉排序树 238
7.3.2 平衡二叉树 245
7.4.1 概述 249
7.4 散列表的查找技术 249
7.4.2 散列函数的设计 251
7.4.3 处理冲突的方法 253
7.4.4 散列查找的性能分析 257
7.4.5 开散列表与闭散列表的比较 258
习题7 260
思考题7 262
第8章 排序技术 263
8.1 概述 263
8.1.1 排序的基本概念 263
8.1.2 排序算法的性能 265
8.2 插入排序 265
8.2.1 直接插入排序 265
8.2.2 希尔排序 268
8.3.1 起泡排序 270
8.3 交换排序 270
8.3.2 快速排序 272
8.4 选择排序 277
8.4.1 简单选择排序 277
8.4.2 堆排序 279
8.5 归并排序 284
8.5.1 二路归并排序的非递归实现 284
8.5.2 二路归并排序的递归实现 288
8.6 各种排序方法的比较 289
习题8 292
思考题8 294
9.1 索引的基本概念 297
第9章 索引技术 297
9.2 线性索引技术 298
9.2.1 稠密索引 298
9.2.2 分块索引 299
9.2.3 多重表 300
9.2.4 倒排表 300
9.3 树形索引 301
9.3.1 2-3树 302
9.3.2 B?树 304
9.3.3 B+树 308
习题9 311
参考文献 313