第1章 数据结构概述 1
1.1 数据结构简介 1
1.1.1 数据与信息 2
1.1.2 算法 2
1.2 程序设计简介 5
1.2.1 程序开发流程 6
1.2.2 结构化程序设计 7
1.2.3 面向对象程序设计 8
1.2.4 数据类型 10
1.3 面向对象的概念与C++语言 10
1.3.1 C++语言 10
1.3.2 类 11
1.3.3 继承 13
1.3.4 多态 14
1.4 算法效率的分析 15
1.4.1 大O 16
1.4.2 大Ω 19
1.4.3 大θ 19
重点整理 19
本章习题 20
第2章 数组和稀疏矩阵 22
2.1 线性表 22
2.1.1 线性表的定义 22
2.1.2 线性表的应用 23
2.2 数组简介 24
2.2.1 一维数组 24
2.2.2 二维数组 26
2.2.3 三维数组 29
2.2.4 n维数组 31
2.3 矩阵简介与运算 33
2.3.1 矩阵相加 33
2.3.2 矩阵相乘 34
2.3.3 转置矩阵 36
2.3.4 稀疏矩阵 38
2.3.5 上三角形矩阵 41
2.3.6 下三角形矩阵 46
2.3.7 带状矩阵 51
2.4 数组与多项式 52
2.4.1 多项式简介 52
2.4.2 多项式的加法 52
重点整理 54
本章习题 55
第3章 链表 57
3.1 指针简介 57
3.1.1 指针声明 57
3.1.2 动态内存分配 59
3.1.3 C++语言中的动态分配与释放 59
3.2 单链表 61
3.2.1 单链表的建立 61
3.2.2 单链表的结点删除 65
3.2.3 单链表的结点插入 68
3.2.4 单链表的反转 73
3.2.5 单链表的连接 76
3.2.6 多项式的表示法 79
3.3 循环链表 83
3.3.1 循环链表的定义 83
3.3.2 循环链表的结点插入 83
3.3.3 循环链表的结点删除 87
3.3.4 循环链表的连接 91
3.3.5 循环链表与稀疏矩阵的表示法 94
3.4 双向链表 97
3.4.1 双向链表的定义 97
3.4.2 双向链表的结点插入 97
3.4.3 双向链表的结点删除 102
重点整理 106
本章习题 107
第4章 堆栈 109
4.1 堆栈简介 109
4.1.1 堆栈的工作原理 109
4.1.2 堆栈的队列实现 110
4.1.3 堆栈的链表实现 114
4.2 堆栈的应用 115
4.2.1 递归 117
4.2.2 河内塔问题 119
4.2.3 迷宫问题 124
4.2.4 八皇后问题 129
4.3 算术表达式的求值 132
4.3.1 中序表示法求值 133
4.3.2 前序表示法求值 134
4.3.3 后序表示法求值 135
4.4 中序表达式转换成前序和后序表达式 135
4.4.1 二叉树法 135
4.4.2 括号法 136
4.4.3 堆栈法 139
4.5 前序和后序表达式转换成中序表达式 146
4.5.1 括号法 146
4.5.2 堆栈法 148
重点整理 150
本章习题 151
第5章 队列 153
5.1 队列简介 153
5.1.1 队列的基本操作 153
5.1.2 队列的数组实现 154
5.1.3 队列的链表实现 157
5.2 队列的应用 159
5.2.1 循环队列 159
5.2.2 优先队列 163
5.2.3 双向队列 163
重点整理 166
本章习题 167
第6章 树 168
6.1 树简介 168
6.2 二叉树简介 170
6.2.1 二叉树的定义 171
6.2.2 特殊二叉树的介绍 172
6.3 二叉树的存储方式 173
6.3.1 二叉树的数组表示法 174
6.3.2 二叉树的链表表示法 175
6.4 二叉树的遍历 178
6.4.1 中序遍历 178
6.4.2 前序遍历 179
6.4.3 后序遍历 179
6.4.4 二叉树的遍历实例 180
6.4.5 二元运算树 184
6.5 二叉树的深入研究 190
6.5.1 排序二叉树 190
6.5.2 线索二叉树 194
6.5.3 索引二叉树 197
6.6 树的二叉树表示法 203
6.6.1 树转换成二叉树 204
6.6.2 二叉树转换成树 206
6.6.3 森林转换成二叉树 206
6.6.4 二叉树转换成森林 207
6.6.5 树与森林的遍历 208
6.6.6 确定惟一二叉树 212
重点整理 214
本章习题 215
第7章 图 217
7.1 图的简介 217
7.1.1 图的起源 217
7.1.2 图的名词术语 218
7.2 图的表示法 221
7.2.1 邻接矩阵法 221
7.2.2 邻接表法 224
7.2.3 多重邻接链表法 227
7.2.4 标记法 228
7.3 图的遍历 230
7.3.1 深度优先法 230
7.3.2 广度优先法 233
7.4 生成树 237
7.5 最小生成树 238
7.5.1 Prim算法 239
7.5.2 Kruskal算法 240
7.6 图的最短路径 244
7.6.1 单点对全部顶点的最短路径 244
7.6.2 顶点之间的最短路径 248
7.7 AOV网络与拓扑排序 252
7.7.1 拓扑排序 253
7.7.2 AOE网络 255
重点整理 256
本章习题 257
第8章 排序 261
8.1 排序简介 261
8.1.1 排序的分类 261
8.1.2 排序算法的分析 262
8.2 内部排序法 262
8.2.1 冒泡排序法 263
8.2.2 选择排序法 267
8.2.3 插入排序法 269
8.2.4 希尔排序法 271
8.2.5 合并排序法 273
8.2.6 快速排序法 274
8.2.7 堆排序法 277
8.2.8 基数排序法 284
8.3 外部排序法 287
8.3.1 直接合并排序法 287
8.3.2 K-路合并法 291
8.3.3 多相合并法 291
重点整理 292
本章习题 293
第9章 查找 296
9.1 查找简介 296
9.2 常见的查找方法 296
9.2.1 顺序查找法 297
9.2.2 二分查找法 298
9.2.3 插值查找法 301
9.2.4 斐波纳契查找法 303
9.2.5 哈希查找法 308
重点整理 319
本章习题 321