章 绪论 1
1.1 数据结构的基本概念 1
1.1.1 为什么要学习数据结构 1
1.1.2 什么是数据结构 2
1.1.3 数据类型与抽象数据类型 5
1.2 算法 9
1.2.1 什么是算法 9
1.2.2 算法分析 11
1.2.3 算法设计与实现 13
习题1 16
实验1 算法设计与分析 17
第2章 线性表 18
2.1 线性表的定义及抽象数据类型 18
2.2 线性表的顺序存储结构和实现 20
2.2.1 线性表的顺序存储结构 20
2.2.2 顺序表类的设计及应用 21
2.3 线性表的存储和实现 32
2.3.1 线性表的链式存储结构 32
2.3.2 单链表 33
2.3.3 循环双链表 43
2.4 排序线性表的存储和实现 46
2.4.1 比较对象大小的方法 46
2.4.2 排序顺序表 48
2.4.3 排序单链表 54
2.5 线性表的应用:多项式的存储和运算 55
2.5.1 一元多项式的存储和运算 55
2.5.2 二元多项式的存储和运算 60
习题2 62
实验2 线性表的基本操作 63
第3章 字符串 65
3.1 字符串抽象数据类型 65
3.2 字符串的顺序存储结构和实现 67
3.2.1 常量字符串 67
3.2.2 变量字符串 75
3.3 字符串的模式匹配 79
3.3.1 Brute-Force模式匹配算法 80
3.3.2 模式匹配应用 82
3.3.3 KMP模式匹配算法 84
习题3 90
实验3 字符串的基本操作和模式匹配算法 91
第4章 栈、队列和递归 94
4.1 栈 94
4.1.1 栈的定义及抽象数据类型 94
4.1.2 栈的存储结构和实现 95
4.1.3 栈的应用 97
4.2 队列 105
4.2.1 队列的定义及抽象数据类型 105
4.2.2 队列的存储结构和实现 106
4.2.3 队列的应用 111
4.2.4 优先队列 112
4.3 递归 114
习题4 120
实验4 栈、队列和递归算法 120
第5章 数组和广义表 124
5.1 数组 124
5.2 特殊矩阵的压缩存储 129
5.2.1 三角矩阵、对称矩阵和对角矩阵的压缩存储 129
5.2.2 稀疏矩阵的压缩存储 131
5.3 广义表 141
5.3.1 广义表定义及抽象数据类型 141
5.3.2 广义表的存储结构和实现 143
习题5 148
实验5 矩阵和广义表的存储和运算 149
第6章 二叉树 151
6.1 二叉树概述 151
6.1.1 二叉树的定义、性质及抽象数据类型 151
6.1.2 二叉树的存储结构 154
6.1.3 二叉树的二叉链表实现 155
6.2 树 169
6.2.1 树的定义及抽象数据类型 169
6.2.2 树的存储结构 171
6.2.3 树/森林的父母孩子兄弟链表实现 172
6.3 二叉树应用 176
6.3.1 Huffman树 176
6.3.2 表达式二叉树 185
习题6 189
实验6 二叉树和树的基本操作 191
第7章 图 194
7.1 图的概念和抽象数据类型 194
7.2 图的存储结构和实现 201
7.2.1 抽象图类,存储顶点集合 201
7.2.2 图的邻接矩阵存储结构和实现 202
7.2.3 图的邻接表存储结构和实现 207
7.2.4 图的邻接多重表存储结构 212
7.3 图的遍历 212
7.3.1 图的深度优先遍历 213
7.3.2 图的广度优先遍历 216
7.4 最小生成树 218
7.5 最短路径 222
7.5.1 单源最短路径 223
7.5.2** 每对顶点间的最短路径 227
习题7 230
实验7 图的存储结构和操作算法 231
第8章 查找 234
8.1 查找基础 234
8.1.1 查找概述 234
8.1.2 二分法查找 237
8.2 索引 239
8.2.1 分块与索引 239
8.2.2 静态索引 241
8.2.3 动态索引 245
8.3 散列表 246
8.4 二叉排序树和平衡二叉树 251
8.4.1 二叉排序树 251
8.4.2 二叉树采用三叉链表存储结构 258
8.4.3** 平衡二叉树 259
8.5 映射 262
8.5.1 映射的定义及接口 262
8.5.2 散列映射 264
8.5.3 树映射 266
习题8 269
实验8 集合和映射的数据结构设计和查找算法设计 270
第9章 排序 274
9.1 插入排序 274
9.1.1 直接插入排序 274
9.1.2 希尔排序 276
9.2 交换排序 278
9.2.1 冒泡排序 278
9.2.2 快速排序 280
9.3 选择排序 282
9.3.1 直接选择排序 282
9.3.2 堆排序 283
9.4 归并排序 286
9.5 线性表的排序算法 288
9.5.1 顺序表的排序算法 289
9.5.2 单链表的排序算法 289
9.5.3 循环双链表的排序算法 292
习题9 293
实验9 排序算法设计 294
0章 综合应用设计 296
10.1 Java集合框架 296
10.1.1 Arrays数组类 296
10.1.2 集合 297
10.1.3 映射 304
10.2 实现迭代器 305
10.2.1 设计基于迭代器的通用操作 305
10.2.2 提供迭代器的类 307
10.3 算法设计策略 309
10.3.1 分治法 309
10.3.2 动态规划法 311
10.3.3 贪心法 313
10.3.4 回溯法 323
10.4 课程设计的目的、要求和选题 337
附录A ASCII字符与Unicode值 340
附录B Java关键字 341
附录C Java基本数据类型 342
附录D Java运算符及其优先级 343
附录E Java类库(部分) 344
E.1 java.lang语言包 344
E.2 java.util实用包 347
附录F MyEclipse常用菜单命令 349
参考文献 350