第1章 概论 1
1.1 引言 1
1.1.1 什么是数据结构 1
1.1.2 数据结构研究内容 1
1.2 数据的逻辑结构 3
1.2.1 有关概念和术语 3
1.2.2 数据的逻辑结构 4
1.3 数据的存储结构 5
1.4 算法和算法分析 7
1.4.1 算法的概念 7
1.4.2 算法的效率评价 7
小结 9
实验1复习数组、指针、结构体 10
习题1 13
第2章 线性表 16
2.1 线性表的基本概念 16
2.1.1 线性表的定义 16
2.1.2 线性表的基本操作 17
2.2 线性表的顺序存储 18
2.2.1 顺序表 18
2.2.2 顺序表的基本运算的实现 19
2.3 线性表的链式存储 25
2.3.1 单链表 26
2.3.2 单链表的基本操作实现 27
2.3.3 循环链表 32
2.3.4 双向链表 33
2.4 顺序表与链表的比较 35
2.5 线性表的应用举例(约瑟夫环问题) 36
2.5.1 问题描述 36
2.5.2 数据结构 36
2.5.3 程序流程 36
2.5.4 源程序及运算结果 37
小结 40
实验2线性表子系统 40
习题2 46
第3章 栈 49
3.1 栈的定义及运算 49
3.1.1 栈的定义 49
3.1.2 栈的基本操作 50
3.2 栈的存储和实现 50
3.2.1 顺序栈 50
3.2.2 链栈 55
3.3 栈的应用举例 58
小结 61
实验3栈子系统 61
习题3 69
第4章 队列 72
4.1 队列的定义与基本运算 72
4.1.1 队列(Queue)的定义 72
4.1.2 队列的基本操作 73
4.2 队列的存储实现及运算实现 73
4.2.1 顺序队列 73
4.2.2 循环队列 74
4.2.3 链队列 79
4.3 队列的应用举例 82
小结 83
实验4队列子系统 83
习题4 87
第5章 串和广义表 91
5.1 串的定义和基本运算 91
5.1.1 串的定义 91
5.1.2 串的基本操作 92
5.2 串的存储结构 93
5.2.1 定长顺序串存储 94
5.2.2 链式存储 95
5.2.3 串的堆分配存储结构 95
5.3 串的基本运算的实现 97
5.4 广义表 101
5.4.1 广义表的定义和运算 101
5.4.2 广义表的存储 102
小结 104
实验5串子系统 105
习题5 113
第6章 树 117
6.1 树 117
6.1.1 树的定义 117
6.1.2 树的基本术语 118
6.2 二叉树 119
6.2.1 二叉树的定义 119
6.2.2 二叉树的基本运算 120
6.2.3 二叉树的性质 120
6.2.4 二叉树的存储结构 121
6.3 遍历二叉树 123
6.3.1 遍历二叉树 123
6.3.2 恢复二叉树 125
6.3.3 二叉树的其他操作 127
6.4 树和森林与二叉树的转换 129
6.4.1 树的存储结构 129
6.4.2 树和森林转换为二叉树 131
6.4.3 二叉树还原为树和森林 133
6.5 哈夫曼树 135
6.5.1 相关概念和哈夫曼树的定义 135
6.5.2 哈夫曼树的构造方法 136
6.5.3 哈夫曼编码 137
小结 140
实验6二叉树子系统 141
习题6 147
第7章 图 151
7.1 图的定义和术语 151
7.1.1 图的定义 151
7.1.2 图的相关术语 152
7.1.3 图的基本操作 154
7.2 图的存储结构 154
7.2.1 邻接矩阵 155
7.2.2 邻接表 157
7.3 图的遍历 160
7.3.1 深度优先搜索法 161
7.3.2 广度优先搜索法 162
7.4 图的连通性 164
7.4.1 无向图的连通分量和生成树 164
7.4.2 最小生成树的基本概念 165
7.4.3 普里姆(Prim)算法 165
7.4.4 克鲁斯卡尔(Kruskal)算法 169
7.5 最短路径问题 171
7.5.1 最短路径概念 171
7.5.2 求单源最短路径的方法 172
小结 176
实验7图子系统 176
习题7 181
第8章 查找 185
8.1 基本概念 185
8.2 静态查找表 186
8.2.1 顺序查找 187
8.2.2 折半查找 188
8.2.3 分块查找 191
8.3 动态查找表 193
8.3.1 二叉排序树的概念 193
8.3.2 二叉排序树的基本运算 194
8.4 哈希表查找 200
8.4.1 哈希表查找的基本思想 200
8.4.2 哈希表的构造方法 201
8.4.3 哈希表的冲突处理 202
8.4.4 哈希表的查找及性能分析 204
小结 206
实验8查找子系统 207
习题8 216
第9章 排序 219
9.1 排序的基本概念 219
9.2 插入排序 220
9.2.1 直接插入排序 220
9.2.2 希尔排序(Shell's Sort) 222
9.3 交换排序 224
9.3.1 冒泡排序(Bubble Sort) 224
9.3.2 快速排序(Quick Sort) 225
9.4 选择排序 227
9.4.1 直接选择排序 227
9.4.2 堆排序(Heap Sort) 229
9.5 归并排序 232
9.6 各种排序方法的比较 234
小结 234
实验9排序子系统 235
习题9 241
第10章 数据结构实验系统开发及说明 245
10.1 系统设计 245
10.1.1 系统模块设计规则 245
10.1.2 系统中的文件包含 246
10.2 系统实现 247
10.2.1 主调函数的设计与实现 247
10.2.2 调试运行系统 248
10.2.3 实训报告 250
附录A 习题答案 251
附录B 模拟试题及答案 270
参考文献 276