第1章 数据结构概论 1
1.1 数据结构的概念 1
1.1.1 什么是数据结构 1
1.1.2 基本概念和术语 5
1.1.3 数据结构课程的内容和任务 7
1.2 数据类型、抽象数据类型和参数传递 7
1.2.1 数据类型 8
1.2.2 抽象数据类型 8
1.2.3 参数传递 9
1.3 算法和算法分析 10
1.3.1 算法特性 10
1.3.2 算法描述 11
1.3.3 算法性能分析与度量 11
1.4 习题 13
第2章 线性表 15
2.1 线性表的逻辑结构 15
2.1.1 线性表的类型定义 15
2.1.2 线性表的基本操作 16
2.2 线性表的顺序存储表示和实现 17
2.2.1 顺序表 17
2.2.2 顺序表的基本运算 18
2.2.3 顺序表的应用举例 22
2.3 线性表的链式存储和运算实现 24
2.3.1 单链表 24
2.3.2 单链表的基本运算 26
2.3.3 循环链表 32
2.3.4 双向链表 33
2.3.5 单链表应用举例 34
2.4 顺序表和链表的比较 37
2.5 习题 38
第3章 栈 39
3.1 栈的定义和基本运算 39
3.1.1 栈的定义 39
3.1.2 栈的基本运算 40
3.2 栈的存储实现和运算实现 40
3.2.1 栈的顺序存储结构 40
3.2.2 栈的链式存储结构 43
3.3 栈的应用举例 44
3.3.1 数制转换 44
3.3.2 算术运算式的转换 45
3.3.3 子程序调用 49
3.3.4 编译错误处理 49
3.3.5 迷宫问题 49
3.4 习题 53
第4章 队列 55
4.1 队列的定义及基本运算 55
4.1.1 队列的定义 55
4.1.2 队列的基本运算 56
4.2 队列的存储结构及运算实现 56
4.2.1 顺序队列 56
4.2.2 队列的链式存储结构 60
4.3 队列应用举例 62
4.4 习题 65
第5章 串 66
5.1 串及串的基本运算 66
5.1.1 串的基本概念 66
5.1.2 串的基本运算 67
5.2 串的定长顺序存储结构及基本运算 68
5.2.1 串的定长顺序存储结构 68
5.2.2 定长顺序串的基本运算 69
5.3 堆分配存储结构及基本运算的实现 71
5.3.1 串的堆分配存储结构 71
5.3.2 基于堆结构串的基本运算 71
5.4 串的块链存储结构简介 73
5.5 串的模式匹配 74
5.5.1 简单的模式匹配算法 74
5.5.2 改进后的模式匹配算法 76
5.6 串操作应用举例 81
5.7 习题 82
第6章 数组、特殊矩阵和广义表 84
6.1 数组的逻辑结构及存储结构 84
6.1.1 数组的定义及逻辑结构 84
6.1.2 数组的内存映像 85
6.2 矩阵的压缩存储 87
6.2.1 对称矩阵的压缩存储 87
6.2.2 三角矩阵 88
6.2.3 带状矩阵 89
6.3 稀疏矩阵 90
6.3.1 稀疏矩阵的转置 91
6.3.2 稀疏矩阵的乘积 92
6.4 广义表 95
6.4.1 广义表的概念和特性 95
6.4.2 广义表的存储结构 95
6.4.3 广义表的基本运算和实现 98
6.5 习题 101
第7章 树和二叉树 103
7.1 树的定义及表示 103
7.1.1 树的定义及相关术语 103
7.1.2 树的表示 105
7.2 二叉树 107
7.2.1 二叉树的定义 107
7.2.2 二叉树的性质 108
7.2.3 二叉树的存储结构 109
7.2.4 二叉树的基本操作及运算实现 112
7.3 二叉树的遍历 115
7.3.1 二叉树的遍历方法及递归实现 115
7.3.2 由遍历序列恢复二叉树 118
7.4 线索二叉树 120
7.4.1 线索二叉树的定义及结构 120
7.4.2 线索二叉树的基本运算 122
7.5 树和森林 125
7.5.1 树的存储结构 125
7.5.2 二叉树与树和森林的相互转换 126
7.5.3 树和森林的遍历 128
7.5.4 树的应用 128
7.6 哈夫曼树及应用 131
7.6.1 最优二叉树(哈夫曼树) 131
7.6.2 哈夫曼编码 135
7.7 习题 138
第8章 图 140
8.1 图的基本概念和基本术语 140
8.1.1 图的基本定义 140
8.1.2 图的基本与术语 141
8.1.3 图的基本操作 143
8.2 图的存储结构 144
8.2.1 邻接矩阵 144
8.2.2 邻接表 145
8.2.3 十字链表 147
8.2.4 邻接多重表 149
8.3 图的遍历 150
8.3.1 深度优先搜索 150
8.3.2 广度优先搜索 152
8.4 图的连通性问题 153
8.4.1 无向图的连通分量和生成树 153
8.4.2 应用图的遍历判定图的连通性问题 155
8.4.3 最小生成树 155
8.4.4 构造最小生成树的Prim算法 156
8.4.5 构造最小生成树的Kruskal算法 158
8.5 最短路径 160
8.5.1 从一个源点到其他各顶点的最短路径 160
8.5.2 每一对顶点之间的最短路径 163
8.6 有向无环图及其应用 165
8.6.1 有向无环图的定义 165
8.6.2 AOV网与拓扑排序 165
8.6.3 AOE网与关键路径 167
8.7 习题 171
第9章 查找 173
9.1 基本概念 173
9.2 静态查找表 174
9.2.1 顺序表的查找 174
9.2.2 有序表的查找 175
9.2.3 索引顺序表的查找 178
9.3 动态查找表 178
9.3.1 二叉排序树 178
9.3.2 平衡二叉树 183
9.3.3 B-树和B+树 188
9.4 哈希表查找(杂凑法) 194
9.4.1 什么是哈希表 194
9.4.2 哈希函数的构造方法 194
9.4.3 处理冲突的方法 197
9.4.4 哈希表的查找及其分析 199
9.5 习题 200
第10章 排序 201
10.1 概述 201
10.2 插入排序 202
10.2.1 直接插入排序 202
10.2.2 折半插入排序 203
10.2.3 希尔排序(又称缩小增量排序) 204
10.3 交换排序 206
10.3.1 冒泡排序 206
10.3.2 快速排序 206
10.4 选择排序 209
10.4.1 简单选择排序 209
10.4.2 树形选择排序 210
10.4.3 堆排序 211
10.5 归并排序 213
10.6 基数排序 215
10.6.1 多关键字的排序 215
10.6.2 链式基数排序 215
10.7 外部排序 218
10.8 习题 222
附录 实验内容 224