第1章 绪论 1
1.1 引言 1
1.2 基本概念和术语 3
1.3 算法描述 5
1.3.1 算法的重要特性 5
1.3.2 数据结构的基本操作 5
1.3.3 算法的描述方法 5
1.4 算法分析 6
1.4.1 算法设计的要求 6
1.4.2 算法时间效率的度量分析 7
小结 8
习题一 9
第2章 线性表 11
2.1 线性表的概念和基本操作 11
2.2 线性表的顺序存储结构 12
2.2.1 顺序表的定义 12
2.2.2 顺序表中元素的插入 14
2.2.3 顺序表中元素的删除 15
2.2.4 顺序表中元素的定位 16
2.3 线性表的链式存储结构 16
2.3.1 单链表的定义和操作实现 16
2.3.2 循环链表的定义和操作实现 23
2.3.3 双向链表的定义和操作实现 24
2.4 线性表两种存储方式的比较 25
2.5 应用举例分析 25
小结 30
习题二 31
第3章 栈和队列 33
3.1 栈 33
3.1.1 栈的定义和基本操作 33
3.1.2 栈的顺序存储结构和操作实现 34
3.1.3 栈的链式存储结构和操作实现 36
3.1.4 递归和栈 36
3.1.5 算术表达式的计算 40
3.2 队列 46
3.2.1 队列的定义和基本操作 46
3.2.2 队列的顺序存储结构和操作实现 46
3.2.3 队列的链式存储结构和操作实现 50
3.3 应用举例分析 52
小结 54
习题三 55
第4章 其他线性数据结构 58
4.1 串 58
4.1.1 串的定义和基本操作 58
4.1.2 串的表示和实现 59
4.1.3 串的基本操作的实现 60
4.2 多维数组 63
4.2.1 多维数组的定义和存储结构 63
4.2.2 稀疏矩阵的压缩 65
4.2.3 特殊矩阵的压缩 67
4.3 广义表 69
4.3.1 广义表的定义和基本运算 69
4.3.2 广义表的存储结构 71
4.4 应用举例分析 73
小结 74
习题四 74
第5章 树和二叉树 77
5.1 树的基本定义 77
5.1.1 树的定义 77
5.1.2 基本术语 78
5.2 二叉树 79
5.2.1 二叉树的定义和基本操作 79
5.2.2 二叉树的性质 80
5.2.3 二叉树的存储结构 82
5.2.4 二叉树的遍历 85
5.3 树和森林 90
5.3.1 树的存储结构 90
5.3.2 树、森林和二叉树的转换 93
5.3.3 树和森林的遍历 96
5.4 树的应用 96
5.4.1 哈夫曼树和哈夫曼编码 96
5.4.2 线索二叉树 99
5.5 应用举例分析 102
小结 106
习题五 107
第6章 图 111
6.1 图的定义和术语 111
6.2 图的存储结构 115
6.2.1 邻接矩阵 115
6.2.2 邻接链表和逆邻接链表 117
6.2.3 十字链表 120
6.2.4 邻接多重表 120
6.3 图的遍历 121
6.3.1 深度优先遍历 121
6.3.2 广度优先遍历 123
6.4 图的应用 125
6.4.1 生成树和最小生成树 125
6.4.2 拓扑排序 127
6.4.3 关键路径 130
6.4.4 最短路径 132
6.5 应用举例分析 135
小结 140
习题六 140
第7章 查找 144
7.1 查找的基本概念 144
7.2 线性表查找 146
7.2.1 顺序查找 146
7.2.2 二分法查找 147
7.3 索引顺序查找 149
7.4 动态查找 151
7.4.1 二叉排序树的概念和操作 151
7.4.2 平衡二叉树 154
7.4.3 B_树和B+树 158
7.5 散列表 159
7.5.1 散列表和散列函数 160
7.5.2 散列函数的构造 161
7.5.3 解决冲突的主要方法 162
7.5.4 散列表的查找和性能分析 164
7.6 应用举例分析 165
小结 171
习题七 172
第8章 内部排序 175
8.1 排序的基本概念 175
8.2 简单排序 176
8.2.1 直接插入排序 176
8.2.2 冒泡排序 177
8.2.3 选择排序 179
8.3 高级排序 180
8.3.1 希尔排序 180
8.3.2 快速排序 181
8.3.3 堆排序 184
8.3.4 归并排序 188
8.3.5 基数排序 189
小结 192
习题八 192
第9章 实训指导 198
实训一 顺序表的建立与基本操作 198
实训二 链表的操作 199
实训三 栈与队列的基本操作 201
实训四 串的操作与稀疏矩阵的压缩 202
实训五 二叉树的基本操作 203
实训六 树的应用 205
实训七 图的建立与遍历 206
实训八 图的应用 207
实训九 简单内部排序 208
附录A 各章习题答案 211
参考文献 214