第1章 数据结构概述 1
1.1 数据结构课程的性质和地位 1
1.1.1 数据结构课程所讨论的内容 1
1.1.2 数据结构在计算机学科中的地位 4
1.2 基本概念和术语 5
1.2.1 数据结构的相关术语 5
1.2.2 数据的逻辑结构 5
1.2.3 数据的存储结构 6
1.2.4 数据类型和抽象数据类型 7
1.3 算法及算法分析 8
1.3.1 算法的概念 8
1.3.2 算法的设计要求 8
1.3.3 算法的时间复杂度 9
1.3.4 算法的空间复杂度 11
本章小结 11
习题 12
第2章 线性表 15
2.1 线性表的逻辑结构 15
2.1.1 线性表的定义 15
2.1.2 线性表的常用操作 16
2.2 线性表的顺序存储结构 16
2.2.1 顺序表的类型定义 17
2.2.2 顺序表的基本运算 18
2.3 线性表的链式存储结构 21
2.3.1 单链表 21
2.3.2 循环链表 25
2.3.3 双向链表 26
2.3.4 静态链表 28
2.4 两种存储结构的比较 28
2.5 实训 29
本章小结 31
习题 32
第3章 栈和队列 35
3.1 栈 35
3.1.1 栈的定义及常用操作 35
3.1.2 栈的顺序存储结构 36
3.1.3 栈的链式存储结构 40
3.1.4 栈的应用 41
3.2 队列 47
3.2.1 队列的定义及常用操作 47
3.2.2 队列的顺序存储结构 47
3.2.3 队列的链式存储结构 49
3.2.4 队列的应用 51
3.3 实训 52
本章小结 55
习题 56
第4章 串 58
4.1 串的定义及常用操作 58
4.1.1 串的定义及相关术语 58
4.1.2 串的常用操作 59
4.2 串的存储结构 59
4.2.1 串的定长顺序存储结构 60
4.2.2 串的动态顺序存储结构 62
4.2.3 串的链式存储结构 63
4.3 串的模式匹配 63
4.4 串的应用 65
4.5 实训 66
本章小结 68
习题 68
第5章 数组和广义表 71
5.1 数组 71
5.1.1 数组的定义及常用操作 71
5.1.2 数组的顺序存储结构及基本运算 72
5.2 矩阵的压缩存储 73
5.2.1 特殊矩阵 73
5.2.2 稀疏矩阵 76
5.3 广义表 77
5.3.1 广义表的定义及常用操作 78
5.3.2 广义表的存储结构 79
5.3.3 广义表基本操作的实现 82
5.4 实训 83
本章小结 86
习题 87
第6章 树 89
6.1 树的逻辑结构 89
6.1.1 树的定义及逻辑特征 89
6.1.2 树的表示形式 90
6.1.3 树的基本术语 91
6.1.4 树的常用操作 92
6.2 二叉树 92
6.2.1 二叉树的定义及常用操作 92
6.2.2 二叉树的性质 93
6.2.3 二叉树的存储结构 96
6.3 二叉树的遍历 97
6.3.1 二叉树遍历的概念 97
6.3.2 二叉树遍历的算法 98
6.4 构造二叉树 101
6.4.1 由遍历序列构造二叉树 101
6.4.2 构造二叉树的算法 103
6.4.3 二叉树的其他递归算法 104
6.5 线索二叉树 105
6.5.1 线索二叉树的概念 105
6.5.2 二叉树的线索化 106
6.5.3 线索二叉树的主要算法 107
6.6 树和森林 109
6.6.1 树的存储结构 109
6.6.2 树、森林和二叉树的转换 112
6.6.3 树和森林的遍历 115
6.7 哈夫曼树 116
6.7.1 哈夫曼树的定义 116
6.7.2 哈夫曼树的构造算法 118
6.7.3 哈夫曼编码 119
6.8 实训 120
本章小结 123
习题 123
第7章 图 127
7.1 图的定义和术语 127
7.1.1 图的基本概念 128
7.1.2 图的基本操作 130
7.2 图的存储结构 130
7.2.1 邻接矩阵表示法 130
7.2.2 邻接表表示法 131
7.3 图的遍历 132
7.3.1 深度优先搜索 133
7.3.2 广度优先搜索 134
7.4 生成树和最小生成树 136
7.4.1 基本概念 136
7.4.2 普里姆(Prim)算法 137
7.4.3 克鲁斯卡尔(Kruskal)算法 138
7.5 有向无环图及其应用 139
7.5.1 拓扑排序 139
7.5.2 关键路径 142
7.6 最短路径 145
7.6.1 最短路径的概念 145
7.6.2 单源最短路径 145
7.6.3 所有顶点之间的最短路径 148
7.7 实训 151
本章小结 153
习题 154
第8章 查找 158
8.1 查找的基本概念 158
8.2 线性表查找 160
8.2.1 顺序查找 160
8.2.2 折半查找 161
8.2.3 索引查找 164
8.3 树表查找 165
8.3.1 二叉排序树 165
8.3.2 平衡二叉树 170
8.4 哈希表查找 176
8.4.1 哈希表的定义 176
8.4.2 哈希函数的构造 176
8.4.3 冲突处理方法 178
8.4.4 哈希表的查找及其分析 180
8.5 实训 182
本章小结 184
习题 185
第9章 内部排序 189
9.1 排序概述 189
9.1.1 排序的基本概念 190
9.1.2 排序的分类 190
9.1.3 排序算法性能评价 190
9.1.4 排序数据的类型说明 191
9.2 插入排序 191
9.2.1 直接插入排序 191
9.2.2 折半插入排序 193
9.2.3 希尔排序 194
9.3 交换排序 196
9.3.1 冒泡排序 196
9.3.2 快速排序 198
9.4 选择排序 202
9.4.1 简单选择排序 202
9.4.2 树形选择排序 203
9.4.3 堆排序 204
9.5 归并排序 209
9.6 基数排序 211
9.6.1 多关键字排序 211
9.6.2 基数排序 212
9.7 各种内部排序方法的比较 216
9.8 实训 217
本章小结 220
习题 221
参考文献 224