第1章 数据结构导论 1
1.1 数据结构简介 2
1.1.1 数据与信息 2
1.1.2 算法 3
1.1.3 算法的条件 3
1.2 认识程序设计 5
1.2.1 程序开发流程 5
1.2.2 数据类型简介 6
1.2.3 结构化程序设计 6
1.2.4 面向对象程序设计 7
1.3 算法效能分析 9
1.3.1 时间复杂度 9
1.3.2 Big-oh 10
1.3.3 Ω(omega) 11
1.3.4 θ(theta) 12
1.4 面向对象程序设计与Java 12
1.4.1 类与对象 12
1.4.2 面向对象特性 14
1.4.3 数据封装 14
1.4.4 类继承 15
1.4.5 对象多态 17
1.4.6 抽象类 19
1.4.7 接口 20
本章重点整理 22
本章习题 23
第2章 数组结构 29
2.1 线性表 30
2.1.1 线性表定义 30
2.1.2 线性表在计算机中的应用 30
2.2 认识数组 31
2.2.1 一维数组 32
2.2.2 二维数组 33
2.2.3 三维数组 35
2.2.4 n维数组 37
2.2.5 Arrays类实现 38
2.3 矩阵的简介与运算 40
2.3.1 矩阵相加 40
2.3.2 矩阵相乘 42
2.3.3 转置矩阵 45
2.3.4 稀疏矩阵 46
2.3.5 上三角形矩阵 50
2.3.6 下三角形矩阵 55
2.4 数组与多项式 60
2.4.1 认识多项式 60
2.4.2 多项式的加法 60
本章重点整理 61
本章习题 63
第3章 链表 67
3.1 单向链表 68
3.1.1 建立单向链表 70
3.1.2 单向链表节点的删除 74
3.1.3 单向链表的节点插入 78
3.1.4 单向链表的反转 80
3.1.5 单向链表的串联 84
3.1.6 多项式的列表表示法 85
3.2 环形链表 89
3.2.1 环形链表的定义 89
3.2.2 环形链表的节点插入 90
3.2.3 环形链表的节点删除 90
3.2.4 环形链表的串联 93
3.2.5 环形链表表示稀疏矩阵 97
3.3 双向链表 98
3.3.1 双向链表的定义 98
3.3.2 双向链表的节点插入 98
3.3.3 双向链表节点删除 99
本章重点整理 103
本章习题 103
第4章 堆栈 110
4.1 认识堆栈 111
4.1.1 堆栈的运算 111
4.1.2 堆栈的数组实现 111
4.1.3 堆栈的表实现 115
4.2 堆栈的应用 118
4.2.1 汉诺塔问题 118
4.2.2 迷宫问题 124
4.2.3 八皇后问题 129
4.3 算术表达式的求值法 132
4.3.1 中序表示法求值 133
4.3.2 前序表示法求值 134
4.3.3 后序表示法求值 135
4.4 中序法转换为前序法 136
4.4.1 二叉树法 136
4.4.2 括号法 136
4.4.3 堆栈法 137
4.5 前序与后序式转换成中序式 143
4.5.1 括号法 143
4.5.2 堆栈法 144
本章重点整理 146
本章习题 147
第5章 队列 155
5.1 认识队列 156
5.1.1 队列的工作运算 156
5.1.2 队列的数组实现 156
5.1.3 以链表实现队列 159
5.2 队列的应用 161
5.2.1 环形队列 162
5.2.2 优先队列 165
5.2.3 双向队列 166
本章重点整理 169
本章习题 169
第6章 树状结构 172
6.1 树 173
6.2 二叉树简介 174
6.2.1 二叉树的定义 175
6.2.2 特殊二叉树简介 176
6.3 二叉树存储方式 177
6.3.1 数组表示法 177
6.3.2 列表表示法 179
6.4 二叉树的遍历 181
6.4.1 中序遍历 182
6.4.2 前序遍历 182
6.4.3 后序遍历 183
6.4.4 二叉树的遍历实现 183
6.4.5 二叉运算树 187
6.5 二叉树的高级研究 192
6.5.1 二叉排序树 192
6.5.2 二叉搜索树 197
6.5.3 线索二叉树 200
6.6 树的二叉树表示法 205
6.6.1 树转换为二叉树 205
6.6.2 树林转换为二叉树 209
6.6.3 树与树林的遍历 211
6.6.4 确定唯一二叉树 214
本章重点整理 216
本章习题 217
第7章 图形结构 224
7.1 图论的起源 225
7.2 图形介绍 226
7.3 图形表示法 228
7.3.1 相邻矩阵法 228
7.3.2 相邻表法 232
7.3.3 相邻多元列表法 236
7.3.4 索引表格法 237
7.4 图形的遍历 239
7.4.1 先深后广法 240
7.4.2 先广后深法 243
7.5 生成树 246
7.6 MST生成树 248
7.6.1 Prim算法 249
7.6.2 Kruskal算法 250
7.7 图形最短路径 255
7.7.1 单点对全部顶点 256
7.7.2 顶点两两之间的最短距离 259
7.8 AOV网络与拓扑排序 263
7.8.1 AOV网络简介 264
7.8.2 拓扑排序实现 264
7.8.3 AOE网络 266
本章重点整理 268
本章习题 269
第8章 排序 277
8.1 排序简介 278
8.1.1 排序的分类 279
8.1.2 排序算法分析 279
8.2 内部排序法 280
8.2.1 冒泡排序法 280
8.2.2 选择排序法 285
8.2.3 插入排序法 288
8.2.4 希尔排序法 290
8.2.5 合并排序法 292
8.2.6 快速排序法 293
8.2.7 堆积排序法 297
8.2.8 基数排序法 304
8.3 外部排序法 307
本章重点整理 316
本章习题 317
第9章 查找 323
9.1 查找简介 324
9.2 常见查找方法 324
9.2.1 顺序查找法 324
9.2.2 二分查找法 326
9.2.3 插值查找法 328
9.2.4 斐波那契查找法 331
9.3 哈希查找法 333
9.3.1 哈希法简介 333
9.3.2 常见的哈希函数 334
9.3.3 碰撞问题 338
9.3.4 哈希法综合范例 342
本章重点整理 345
本章习题 346
附录 Java的开发环境简介 353