
本教材简明扼要地介绍了各种典型数据结构的逻辑特性、存储表示和基本运算。主要内容包括:线性表与特殊线性表、栈与队列、树与二叉树、图与网络、查找与内排序、文件与外排序等。存储结构分别采用具有丰富数据类型与良好结构的类PASCAL语言和较流行的C语言进行描述;算法采用结构化流程图(N-S图)进行描述;主要算法以C语言实现;给出算法执行示例。书中配有大量的实例和图示,每章都有丰富的练习题和课程设计,旨在提高读者的算法设计能力和培养读者计算思维能力。
第1章 绪 论 1
1.1 数据结构 1
1.1.1 学习数据结构的重要性 1
1.1.2 什么是数据结构 3
1.1.3 数据的逻辑结构 5
1.1.4 数据的存储结构 10
1.1.5 数据的运算 12
1.2 算法 13
1.2.1 什么是算法 13
1.2.2 算法的描述 13
1.2.3 算法设计 16
1.2.4 算法设计要求 18
1.2.5 算法分析 18
1.3 程序、程序设计与程序设计方法学 20
1.3.1 程序 20
1.3.2 程序设计 20
1.3.3 程序设计方法学 21
1.4 计算思维与抽象数据类型 23
1.4.1 计算思维 24
1.4.2 计算机求解问题 25
1.4.3 抽象数据类型 26
1.4.4 数据类型、数据结构与抽象数据类型 28
1.5 课程设计相关知识 28
1.5.1 课程设计目的与内涵 29
1.5.2 课程设计步骤 29
1.5.3 课程设计报告规范 30
课后练习与课程设计 30
第二章 线性表 32
2.1 线性表ADT 32
2.2 顺序表 33
2.2.1 向量的顺序存储表示 34
2.2.2 向量运算 35
2.2.3 应用举例 40
2.2.4 不等长结点的索引表示——目录表 43
2.3 链表 43
2.3.1 指针与指针对象 43
2.3.2 单链表 46
2.3.3 线性表的两种存储比较 58
2.3.4 可利用空间表及其管理 58
2.4 线性表的其它链接存储表示 60
2.4.1 循环链表 60
2.4.2 双向链表 61
2.4.3 静态链表 63
2.5 课程设计相关内容与应用示例 66
2.5.1 算法设计中的基本方法 66
2.5.2 一元多项式相乘 67
课后练习与课程设计 71
第3章 栈和队列 74
3.1 栈ADT 74
3.2 顺序栈 75
3.2.1 顺序栈的存储表示 75
3.2.2 顺序栈基本运算的实现 76
3.3 链接栈 79
3.3.1 链接栈的存储表示 79
3.3.2 链接栈基本运算的实现 80
3.4 栈的应用举例 80
3.4.1 数制转换 81
3.4.2 表达式求值 82
3.5 队列ADT 86
3.6 顺序队列 87
3.6.1 顺序队列的存储表示 87
3.6.2 顺序队列基本运算的实现 87
3.7 链接队列 90
3.7.1 链接队列的存储表示 90
3.7.2 链接队列基本运算的实现 91
3.8 随机事件模拟 93
3.9 课程设计相关内容与应用示例 96
3.9.1 递归概念 96
3.9.2 递归过程设计 98
3.9.3 递归过程与非递归过程 98
课后练习与课程设计 100
第4章 几种特殊线性表 104
4.1 串 104
4.1.1 串的基本概念 104
4.1.2 串ADT 105
4.1.3 串的存储表示 107
4.1.4 串运算的实现 109
4.2 数组 111
4.2.1 数组ADT 111
4.2.2 数组的顺序存储表示 112
4.3 矩阵 113
4.3.1 对称矩阵的压缩存储 114
4.3.2 对角矩阵的压缩存储 114
4.3.3 稀疏矩阵的三元组顺序表存储表示 116
4.3.4 稀疏矩阵的十字链表存储表示 117
4.3.5 稀疏矩阵的转置运算 118
4.3.6 稀疏矩阵的插入运算 120
4.4 广义表 121
4.4.1 广义表的基本概念 121
4.4.2 广义表ADT 122
4.4.3 广义表的存储表示 123
4.4.4 多元多项式的存储表示 125
4.5 课程设计相关知识与应用示例 127
4.5.1 梵天塔问题 127
4.5.2 再谈递归过程设计 128
4.5.3 求广义表的深度 129
课后练习与课程设计 131
第5章 内排序 133
5.1 排序的基本概念 133
5.2 直接插入排序 134
5.3 直接选择排序 136
5.4 冒泡排序 138
5.5 希尔排序 141
5.6 快速排序 143
5.7 归并排序 148
5.7.1 排序文件的归并 148
5.7.2 2-路归并排序 149
5.8 基数排序 151
5.9 各种排序方法的比较 154
5.10 课程设计相关知识与应用示例 157
5.10.1 自顶向下设计技术与方法 157
5.10.2 逐步求精设计技术与方法 157
5.10.3 积木游戏 158
课后练习与课程设计 160
第6章 树和二叉树 163
6.1 树的基本概念 163
6.2 树的存储结构 165
6.2.1 树的标准形式存储结构 166
6.2.2 树的逆形式存储结构 167
6.2.3 树的扩充标准形式存储结构 167
6.2.4 树的双亲数组存储结构 168
6.2.5 树的孩子链表存储结构 169
6.2.6 树的三重链表存储结构 170
6.3 树的遍历和树的线性表示 171
6.3.1 树的前序遍历 171
6.3.2 树的后序遍历 173
6.3.3 树的层次遍历 174
6.3.4 树的线性表示 176
6.4 二叉树 177
6.4.1 二叉树定义和二叉树ADT 177
6.4.2 二叉树的性质 179
6.4.3 二叉树与树(或森林)之间的转换 180
6.4.4 二叉树的存储表示 183
6.5 二叉树遍历 186
6.5.1 二叉树遍历 187
6.5.2 由遍历序列构造二叉树 197
6.5.3基于二叉树遍历操作的算法举例 198
6.6 线索二叉树 200
6.6.1 线索二叉树 201
6.6.2 线索二叉树的利用 202
6.6.3 二叉树的线索化 205
6.7 哈夫曼树及其应用 206
6.7.1 二叉树的路径长度和带权路径长度 206
6.7.2 哈夫曼树和哈夫曼算法 208
6.7.3 哈夫曼树的应用 210
6.8 课程设计相关知识与应用示例 216
6.8.1 结构化方法概述 216
6.8.2 模块化设计技术与方法 217
6.8.3 模块化应用示例 218
课后练习与课程设计 220
第七章 图 223
7.1 图的基本概念 223
7.2 图的存储结构 227
7.2.1 邻接矩阵 227
7.2.2 邻接表 229
7.3 图的遍历 231
7.3.1 深度优先搜索法 232
7.3.2 广度优先搜索法 233
7.3.3 求图的(强)连通分量 235
7.4 生成树与最小生成树 235
7.4.1 生成树概念 235
7.4.2 最小生成树 236
7.5 最短路径 240
7.5.1 单源最短路径 241
7.5.2 每一对顶点间的最短路径 245
7.6 拓扑排序 247
7.6.1 AOV网 247
7.6.2 拓扑排序 248
7.7 关键路径 250
7.7.1 AOE网 250
7.7.2 关键路径 250
7.8 课程设计相关知识与应用示例 254
7.8.1 递推算法 254
7.8.2 分治法概述 255
7.8.3 数字旋转方阵 255
课后练习与课程设计 258
第8章 查 找 262
8.1 线性表查找 262
8.1.1 顺序查找 262
8.1.2 折半查找 264
8.1.3 分块查找 266
8.2 树型结构查找 267
8.2.1 二叉排序树 267
8.2.2 平衡查找树 271
8.2.3 B树和B+树 278
8.2.4 堆排序 284
8.3 哈希表及其查找 286
8.3.1 哈希表 286
8.3.2 哈希函数构造方法 287
8.3.3 解决冲突方法 290
8.3.4 哈希表查找 292
8.4 课程设计相关知识与应用示例 294
8.4.1 动态规划法概述 294
冯俊,山西财经大学教授,从事计算机方面的教学和科研工作31年,多次被评为优秀教师,2006年被授予山西财经大学第4届教学名师,发表《应用软件开发中的几个重要问题》、《浅谈商业现代化复合型人才培养》《商业自动化与电子货币工程》等几十篇论文;主持完成3项省级教育教学改革项目,并多次获得省级教学成果奖;参加研制开发管理信息系统多项,取得了一定的经济效益和社会效益。鉴定结论达到国内领先。曾经编写过《大学计算机应用基础》等十四本教材。