前言页 1
第1章 绪论 1
1.1 引言 1
1.2 基本概念和术语 3
1.3 算法描述 5
1.3.1 算法的重要特性 5
1.3.2 数据结构上的基本操作 5
1.3.3 算法的描述方法 6
1.4 算法分析 7
1.4.1 算法设计的要求 7
1.4.2 算法时间效率的度量分析 7
2.1 线性表的定义及逻辑结构 11
第2章 线性表 11
2.2 线性表的基本操作 12
2.3 线性表的顺序存储结构 12
2.4 基本操作在顺序表上的实现 13
2.4.1 顺序表上元素的插入 13
2.4.2 顺序表上元素的删除 15
2.4.3 顺序表上元素的定位 16
2.5 应用举例及分析 16
第3章 链式存储结构 21
3.1 线性表的链式存储结构 21
3.1.1 单链表上的基本运算 23
3.1.2 循环链表 29
3.1.3 双向链表 29
3.2 线性表的顺序和链式存储结构的比较 31
3.3 应用举例及分析 32
第4章 栈和队列 37
4.1 栈 37
4.1.1 栈的定义及基本操作 37
4.1.2 栈的顺序存储结构 38
4.1.3 栈的链式存储结构 40
4.2 队列 41
4.2.1 队列的定义及基本操作 41
4.2.2 队列的顺序存储结构 42
4.2.3 队列的链式存储结构 46
4.3 应用举例及分析 48
第5章 其他线性数据结构 53
5.1 串 53
5.1.1 串的定义及基本操作 53
5.1.2 串的存储结构 54
5.1.3 串的基本操作的实现 56
5.2 多维数组 58
5.2.1 二维数组定义及基本操作 58
5.2.2 二维数组的向量存储结构 59
5.2.3 稀疏矩阵的压缩存储 60
5.2.4 稀疏矩阵的转置算法 61
5.3 应用举例及分析 63
第6章 树和二叉树 67
6.1 树的定义和基本操作 67
6.1.1 树的定义 67
6.1.2 基本术语 68
6.1.3 树的基本操作 69
6.2 二叉树 69
6.2.1 二叉树的定义和基本操作 70
6.2.2 二叉树的性质 71
6.2.3 二叉树的存储结构 73
6.2.4 遍历二叉树 75
6.3 树和森林 78
6.3.1 树的存储结构 78
6.3.2 树、森林与二叉树的转换 81
6.3.3 树和森林的遍历 83
6.4 哈夫曼树和判定树 84
6.4.1 哈夫曼树的定义及构造方法 84
6.4.2 哈夫曼编码 86
6.4.3 分类与判定 87
6.5 应用举例及分析 89
7.1 图的定义和术语 99
第7章 图 99
7.2 图的存储结构 102
7.2.1 邻接矩阵表示法 102
7.2.2 邻接链表表示法 104
7.3 图的遍历 107
7.3.1 深度优先搜索遍历 107
7.3.2 广度优先搜索遍历 108
7.4 图的应用 110
7.4.1 生成树和最小生成树 110
7.4.2 拓扑排序 113
7.4.3 最短路径 116
7.5 应用举例及分析 118
第8章 查找 125
8.1 基本概念 125
8.2.1 顺序表上顺序查找 126
8.2 静态查找表 126
8.2.2 有序表查找 128
8.2.3 索引顺序表查找 130
8.3 动态查找 131
8.3.1 二叉排序树的生成和插入 132
8.3.2 二叉排序树上的查找 134
8.3.3 二叉排序树的删除 135
8.4 散列表 137
8.4.1 散列表与散列函数 137
8.4.2 散列函数的构造方法 138
8.4.3 解决冲突的主要方法 140
8.4.4 散列表的查找及分析 142
8.5 应用举例及分析 144
9.1 基本概念 152
第9章 内部排序 152
9.2 三种简单排序方法 153
9.2.1 直接插入排序 153
9.2.2 冒泡排序 154
9.2.3 简单选择排序 156
9.3 快速排序 157
9.4 堆排序 160
9.5 归并排序 164
9.6 基数排序 166
9.6.1 多关键字的排序 167
9.6.2 链式基数排序 167
9.7 各种内部排序方法的比较与讨论 169
附录 数据存储类型说明(datastru.h) 171