第1章 绪论 1
1.1 基本术语和基本运算 1
1.1.1 基本术语 1
1.1.2 基本运算 7
1.2 算法描述和算法分析 8
1.2.1 算法 8
1.2.2 算法描述 9
1.2.3 算法分析 9
习题1 12
第2章 线性表 15
2.1 线性表 15
2.1.1 线性表 15
2.1.2 线性表的运算 16
2.1.3 线性表在计算机内的存储方式 17
2.2 线性表的顺序存储结构 17
2.2.1 基本概念 17
2.2.2 线性表顺序存储结构的描述 18
2.2.3 线性表顺序存储结构运算 18
2.2.4 线性表顺序存储结构的优缺点 22
2.3 线性表的链式存储结构 23
2.3.1 基本概念 23
2.3.2 单链表 23
2.3.3 循环链表 32
2.3.4 双向链表 34
2.3.5 线性表链式存储结构的优缺点 37
习题2 38
第3章 栈和队列 41
3.1 栈 41
3.1.1 栈的基本概念 41
3.1.2 栈的基本运算 42
3.2 栈的存储结构 42
3.2.1 栈的顺序存储结构 42
3.2.2 栈的链式存储结构 44
3.2.3 栈的应用 45
3.3 队列 46
3.3.1 队列的基本概念 46
3.3.2 队列的基本运算 46
3.4 队列的存储结构 47
3.4.1 队列的顺序存储结构 47
3.4.2 循环队列 48
3.4.3 队列的链式存储结构 51
习题3 54
第4章 串 57
4.1 串的基本概念 57
4.2 串的基本运算 58
4.3 串的存储结构 59
4.3.1 串的顺序存储结构 59
4.3.2 串的链式存储结构 61
4.3.3 串的堆分配存储结构 62
4.4 串基本运算的实现 62
4.4.1 顺序方式存储串时的运算 62
4.4.2 链接方式存储串时的运算 64
习题4 65
第5章 数组和广义表 67
5.1 数组 67
5.1.1 数组的基本概念 68
5.1.2 数组的存储结构 69
5.2 矩阵的压缩存储 71
5.2.1 特殊矩阵 71
5.2.2 稀疏矩阵 74
5.3 广义表 79
5.3.1 广义表的基本概念 79
5.3.2 广义表的存储结构 81
5.3.3 广义表的运算 83
习题5 84
第6章 树 86
6.1 树 86
6.1.1 树的定义 86
6.1.2 树的基本术语 87
6.1.3 树的基本运算 88
6.2 二叉树 88
6.2.1 二叉树的概念 88
6.2.2 二叉树的性质 89
6.2.3 二叉树的存储结构 90
6.3 遍历二叉树 92
6.3.1 前序遍历 92
6.3.2 中序遍历 94
6.3.3 后序遍历 95
6.3.4 二叉树的其他运算 96
6.4 线索二叉树 102
6.4.1 线索二叉树的概念 102
6.4.2 线索二叉树的存储结构 103
6.4.3 线索二叉树的有关运算 104
6.5 树和森林 105
6.5.1 树的存储结构 105
6.5.2 树的二叉树表示 107
6.5.3 森林和二叉树的转换 108
6.5.4 树、森林的遍历 109
6.6 哈夫曼树及其应用 110
6.6.1 哈夫曼树 110
6.6.2 哈夫曼算法 111
6.6.3 哈夫曼编码 113
习题6 114
第7章 图 118
7.1 图的基本概念 118
7.1.1 图的定义 118
7.1.2 图的相关术语 119
7.2 图的存储结构 122
7.2.1 邻接矩阵 122
7.2.2 邻接表 125
7.3 图的遍历 128
7.3.1 深度优先搜索遍历 128
7.3.2 广度优先搜索遍历 129
7.4 最小生成树 132
7.4.1 生成最小树的普里姆算法 132
7.4.2 生成最小树的克鲁斯卡尔算法 134
7.5 关键路径 136
7.5.1 AOE网 136
7.5.2 关键路径的概念 137
7.5.3 关键路径的算法 138
7.6 最短路径 140
习题7 143
第8章 查找 146
8.1 基本概念 146
8.2 线性表的查找 148
8.2.1 顺序查找 148
8.2.2 二分查找 150
8.2.3 分块查找 152
8.2.4 顺序查找、二分查找和分块查找的比较 154
8.3 二叉排序树查找 154
8.3.1 二叉排序树的定义 155
8.3.2 二叉排序树的操作 155
8.4 哈希查找 160
8.4.1 哈希查找的概念 160
8.4.2 哈希函数 162
8.4.3 处理冲突的方法 163
习题8 172
第9章 内部排序 174
9.1 基本概念 174
9.2 插入排序 176
9.2.1 直接插入排序 176
9.2.2 折半插入排序 178
9.2.3 希尔排序 179
9.3 交换排序 181
9.3.1 冒泡排序 181
9.3.2 快速排序 184
9.4 选择排序 187
9.4.1 直接选择排序 187
9.4.2 树形选择排序 188
9.4.3 堆排序 189
9.5 归并排序 194
9.6 基数排序 196
9.7 各种内部排序方法的比较 200
习题9 202
第10章 外部排序和文件 206
10.1 外部排序 206
10.1.1 外部排序的有关概念 206
10.1.2 二路归并 207
10.1.3 多路归并 208
10.2 文件 210
10.2.1 文件的基本概念 210
10.2.2 顺序文件 211
10.2.3 索引文件 211
10.2.4 索引顺序文件 213
10.2.5 散列文件 214
10.2.6 多关键字文件 214
习题10 216
第11章 实习部分 218
11.1 实习指导 218
11.2 实习题 219
实习题一 顺序表的建立与运算 219
实习题二 单链表的建立与运算 220
实习题三 多项式相加 220
实习题四 约瑟夫环 221
实习题五 停车场管理 221
实习题六 看病候诊模拟 222
实习题七 串的建立与运算 223
实习题八 词频统计 223
实习题九 数组的存储和运算 223
实习题十 二叉树的存储和运算 224
实习题十一 哈夫曼算法及应用 224
实习题十二 图的遍历 225
实习题十三 二分查找 226
实习题十四 插入排序 226
11.3 综合应用实例——迷宫问题 226
参考文献 232