第1章 概论 1
1.1 学习数据结构的重要性 1
1.2 什么是数据结构 2
1.3 数据的逻辑结构 3
1.3.1 基本概念 3
1.3.2 数据的逻辑结构 4
1.3.3 数据结构的分类 5
1.4 数据的存储结构 6
1.5 数据运算和算法 9
1.5.1 数据运算 9
1.5.2 算法 10
1.5.3 算法评价 11
习题 12
第2章 线性表 13
2.1 线性表的定义和运算 13
2.1.1 线性表的定义 13
2.1.2 线性表的基本运算 14
2.2 线性表的顺序存储结构及其运算 15
2.2.1 线性表的顺序存储结构 15
2.2.2 顺序表的运算 16
2.3 线性表的链接存储结构及其运算 19
2.3.1 线性链表 19
2.3.2 单链表及其运算 21
2.3.3 双向链表 25
2.3.4 循环链表 28
2.4 线性表的应用举例 30
2.4.1 在"线切割编程控制软件"中的链表 30
2.4.2 在"多传感器侦察数据的融合处理"中的双向链表 34
习题 35
第3章 堆栈与队列 36
3.1 栈 37
3.1.1 栈的定义 37
3.1.2 栈的基本运算 38
3.2 栈的存储结构与基本运算 38
3.2.1 栈的顺序存储结构 38
3.2.2 栈的运算 39
3.2.3 双栈结构 41
3.2.4 栈的链接存储结构及其运算 43
3.3 栈的应用举例 45
3.3.1 栈的应用之一:表达式的计算 45
3.3.2 栈的应用之二:数制转换 49
3.3.3 栈的应用之三:括号匹配的检验 50
3.3.4 栈的应用之四:微软Word软件中的"取消"与
"重复"命令的设计 52
3.4 递归 53
3.4.1 递归算法 53
3.4.2 递归的应用 54
3.4.3 递归算法分析 56
3.5 队列 56
3.6 队列的存储结构 57
3.6.1 队列的顺序存储结构 58
3.6.2 顺序队列的基本运算 59
3.6.3 循环队列 61
3.6.4 链接存储结构 63
3.7 队列的实际应用 65
3.7.1 在"打印机软件设计"中的队列 65
3.7.2 在"考虑冲突的模具生产计划调度系统"中的队列 65
3.7.3 在"智能排队系统"中的队列 69
习题 71
第4章 串 73
4.1 串的定义 73
4.2 串的存储结构 74
4.2.1 顺序存储 75
4.2.2 链接存储 76
4.2.3 索引存储 77
4.3 串的基本运算 78
4.3.1 串的基本运算 78
4.3.2 串基本运算的C语言算法 78
4.4 串的应用举例 84
4.4.1 在"软件汉化"中的字符串 84
4.4.2 在现代软件开发工具中的串操作 84
习题 86
第5章 数组和广义表 87
5.1 数组 88
5.1.1 数组的定义 88
5.1.2 数组的顺序存储结构 88
5.2 数组应用举例 90
5.2.1 在"Visual Basic"中的数组 90
5.2.2 Java中的数组 91
5.2.3 在"阵列处理机(数组处理机)"中的数组 92
5.2.4 在"图形化编程语言Lab VIEW"中的数组运算 92
5.3 矩阵的压缩存储 93
5.3.1 特殊矩阵的压缩存储 93
5.3.2 稀疏矩阵及存储 95
5.3.3 三元组表 96
5.3.4 稀疏矩阵链接存储:十字链表 99
5.4 广义表 100
5.4.1 广义表的定义 100
5.4.2 广义表的存储结构 101
5.5 特殊矩阵和广义表的应用举例 103
5.5.1 在"群落与生态系统"研究中的三角矩阵 103
5.5.2 在"基于FMS生产调度与控制的零件动态工艺模型"
中的稀疏矩阵 105
5.5.3 在"中文字字同现概率统计及应用"中的稀疏矩阵 107
习题 108
第6章 树和二叉树 110
6.1 树的基本概念 110
6.1.1 树的定义 110
6.1.2 树的表示方法 112
6.1.3 树的存储结构 113
6.2 二叉树 114
6.2.1 二叉树的定义 114
6.2.2 二叉树的基本性质 115
6.3 二叉树的链接存储 116
6.3.1 二叉链表 116
6.3.2 二叉链表的生成 117
6.4 二叉树的遍历 119
6.4.1 二叉树遍历算法 119
6.4.2 层次遍历算法 122
6.4.3 遍历算法 123
6.5 线索二叉树 124
6.5.1 建立线索二叉树 124
6.5.2 访问线索二叉树 127
6.6 树、森林与二叉树的关系 128
6.6.1 树与二叉树之间的转换 128
6.6.2 森林与二叉树 130
6.6.3 一般树和森林的运算 131
6.7 哈夫曼树 132
6.7.1 哈夫曼树的基本概念 132
6.7.2 判定树 134
6.7.3 哈夫曼编码 135
6.8 树和二叉树的应用举例 138
6.8.1 在"电力地理信息系统" 中的树和二叉树的应用 138
6.8.2 在"工程计算书自动生成技术" 中的树的应用 139
6.8.3 在"PLC指令代码的文法分析和翻译"中的二叉树结构 141
6.8.4 在"基于用户的CAPP零件编码系统的研究"中的二叉树 142
习题 145
第7章 图 147
7.1 图的基本概念 147
7. 2 图的存储结构 151
7.2.1 邻接矩阵表示法 151
7.2.2 邻接表表示法 154
7.3 图的运算 155
7.4 图的遍历 157
7.4.1 深度优先搜索遍历 157
7.4.2 广度优先搜索遍历 160
7.4.3 无向图的遍历 162
7.5 图的应用 163
7.5.1 最小生成树 163
7.5.2 最短路径 168
7.5.3 拓扑(Topology)排序 172
7.6 图的应用实例 174
7.6.1 图在地理信息系统(GIS)中的作用 174
7.6.2 在"变电站故障定位及恢复处理智能系统" 中的图论应用 178
7.6.3 在Internet路由器中的图论应用 180
习题 182
第8章 查找 184
8.1 基本概念 184
8.2 线性表中的查找 186
8.2.1 顺序查找 186
8.2.2 二分法查找 187
8.2.3 分块查找 189
8.3 散列表及其查找 192
8.3.1 散列表的概念 192
8.3.2 散列函数的构造方法 194
8.3.3 冲突处理 196
8.4 查找的应用实例 200
8.4.1 "口令"或"密码"的查找 200
8.4.2 计算机病毒的检测技术 201
8.4.3 在"电信通话记录"中的查找 204
习题 205
第9章 排序 206
9.1 排序的基本概念 206
9.2 插入排序 209
9.2.1 插入排序概述 209
9.2.2 直接插入排序 210
9.2.3 二分插入排序 212
9.2.4 希尔排序 214
9.3 选择排序 216
9.3.1 直接选择排序 216
9.3.2 树形选择排序 218
9.3.3 堆排序 220
9.4 交换排序 226
9.4.1 冒泡排序 226
9.4.2 快速排序 229
9.5 归并排序 232
9.5.1 二路归并 232
9.5.2 一趟归并算法 235
9.5.3 归并排序 237
9.5.4 算法分析 237
9.6 基数排序 238
9.6.1 多关键字的排序 238
9.6.2 基数排序 239
9.7 几种排序方法的比较 242
9.8 排序运算的实际应用事例 244
9.8.1 在"全国普通高校招生网上录取系统"中的排序 244
9.8.2 在"风险评估"中的排序 246
习题 249
第10章 文件 251
10.1 文件的基本概念 251
10.2 顺序文件 253
10.3 索引文件 254
10.3.1 索引顺序与B+ 树文件 256
10.3.2 VSAM文件 259
10.4 散列文件 260
10.5 多关键字文件 262
10.5.1 多关键字文件的概念 262
10.5.2 多重表文件 263
10.5.3 倒排文件 263
10.6 文件应用的实例 264
10.6.1 在Visual Basic中的文件 264
10.6.2 在"太湖流域水情自动监测系统"中的顺序文件 266
10.6.3 在"超市商品库存"中的多关键字文件 268
习题 270
参考文献 272