目录 1
第1章 数据结构概论 1
1.1 数据结构与软件从业人员的未来发展 2
1.1.1 软件的可重用模型 2
1.1.2 数据结构在软件项目开发中的关键作用 2
1.1.3 数据结构与岗位分工 3
1.1.4 数据结构的重要地位与课程学习方法 4
1.2.1 数据结构基础 6
1.2 数据结构综述 6
1.2.2 常用数据结构说明 7
1.2.3 数据结构的实现基础 9
1.3 算法综述 10
1.3.1 算法初步 10
1.3.2 算法的构造 11
1.3.3 算法复杂度 13
1.3.4 基于递归的算法设计思想 14
1.4 数据结构与算法存在互为因果的辩证关系 15
习题 16
第2章 线性表 18
2.1 线性表的概念及其基本运算 19
2.1.1 线性表的逻辑描述 19
2.1.2 线性表的基本运算 19
2.2 顺序表——线性表的顺序存储方式 20
2.2.1 顺序存储结构 20
2.2.2 顺序表基本操作的算法实现 23
2.3.1 单向链表 33
2.3 链表——线性表的链接存储方式 33
2.2.3 顺序表性能小结 33
2.3.2 单向链表的基本操作 36
2.3.3 单向循环链表 51
2.3.4 双向链表和双向循环链表 52
2.3.5 链表性能小结 55
2.4 二维数组的数据压缩处理 55
2.4.1 有规律二维数组的一维化映射 55
2.4.2 无规律稀疏矩阵的数据压缩处理 57
习题 58
第3章 堆栈、队列和串 62
3.1 堆栈 63
3.1.1 堆栈的概念及其操作 63
3.1.2 堆栈的输出序列分析 64
3.1.3 基于顺序表的堆栈实现 64
3.1.4 基于链表的堆栈实现 65
3.1.5 堆栈应用 66
3.2 队列 68
3.2.1 队列的概念及其操作 68
3.2.2 循环队列 68
3.2.3 基于顺序表的队列实现 69
3.2.4 基于链表的队列实现 70
3.2.5 队列应用 71
3.3 串 72
3.3.1 串的概念及其操作 73
3.3.2 串存储结构描述 74
3.3.3 文本编辑 75
习题 76
第4章 树与二叉树 78
4.1.1 基本概念与属性 79
4.1 树与森林 79
4.1.2 树的存储结构 81
4.2 二叉树 82
4.2.1 基本概念 82
4.2.2 二叉树的存储结构 84
4.3 二叉树遍历 85
4.3.1 二叉树的深度优先遍历 86
4.3.2 二叉树的宽度优先遍历 89
4.3.3 二叉树遍历的工程化实现算法 91
4.4.1 树与二叉树的相互转换 92
4.4 树与森林的基本操作 92
4.4.2 森林与二叉树的相互转换 93
4.4.3 树的深度优先遍历 94
4.4.4 树的宽度优先遍历 94
4.5 二叉树应用之一——二叉排序树 95
4.5.1 二叉排序树的定义和遍历特征 95
4.5.2 二叉排序树基本操作的功能实现 95
4.6.1 Hufferman树的定义和特征 106
4.6 二叉树应用之二——Hufferman树 106
4.6.2 生成Hufferman树的算法思路 107
4.6.3 Hufferman树基本操作的功能实现 109
习题 116
第5章 图 118
5.1 基本概念 118
5.1.1 无向图 118
5.1.2 有向图 120
5.2.1 邻接矩阵表示法 121
5.2 图的存储结构 121
5.2.2 邻接表表示法 122
5.3 图的遍历 123
5.3.1 图的深度优先遍历 123
5.3.2 图的宽度优先遍历 124
5.4 生成树和最小生成树 125
5.4.1 生成树 126
5.4.2 最小生成树 126
5.4.3 基于知识的最小生成树 128
5.5 拓扑排序 132
5.6 关键路径法 135
5.7 最短路径 139
5.7.1 单点出发的最短路径问题 139
5.7.2 多点出发的最短路径问题 140
习题 145
第6章 基于树的工程性实用递归算法 147
6.1 算法的递归和非递归实现的性能分析 147
6.1.1 算法的递归实现方法性能分析 147
6.1.2 算法的非递归实现方法性能分析 150
6.1.3 算法的递归实现与非递归实现的比较 151
6.2 工程性实用递归算法解决方案 152
6.2.1 算法描述 152
6.2.2 基于树的工程性实用递归算法实现 152
6.3 新算法应用举例 155
6.3.1 fibonacci数列 155
6.3.2 汉诺塔 157
6.3.3 N皇后问题 160
习题 165
第7章 查找 167
7.1 基本概念和意义 167
7.2 线性表查找 168
7.2.1 线性表的顺序查找 168
7.2.2 顺序表的折半查找 170
7.2.3 顺序表的分块查找 172
7.2.4 线性表的Hash散列查找 173
7.3.1 二叉排序树 176
7.3 基于树的结点查找 176
7.3.2 平衡二叉树 177
7.3.3 一般二叉树的结点查找 182
习题 183
第8章 排序 185
8.1 基本概念 185
8.2 插入排序 186
8.2.1 直接插入排序 186
8.2.2 Shell排序 188
8.3.1 冒泡排序 190
8.3 交换排序 190
8.3.2 快速排序 191
8.4 选择排序 195
8.4.1 直接选择排序 195
8.4.2 二次选择排序 197
8.4.3 堆排序 199
8.5 其他归类排序方法 202
8.5.1 二路归并排序 202
8.5.3 基数排序 205
8.5.2 二叉排序树排序 205
8.6 排序小结 207
习题 208
附录A 实训项目 210
附录B 基于数组的函数原型定义和功能说明array.hc 217
附录C 基于链表的函数原型定义和功能说明chain.hc 222
附录D 基于链表的Hufferman树函数原型定义和功能说明Huffer.hc 230
附录E 教材电子课件所含文件清单及其运行环境说明 234
参考文献 237