第1章 Java语言的面向对象编程 1
1.1 Java入门 1
1.1.1 变量声明 1
1.1.2 运算符 3
1.1.3 选择语句 4
1.1.4 循环语句 5
1.1.5 异常处理 5
1.2 Java面向对象编程 7
1.2.1 封装 7
1.2.2 抽象数据类型 12
1.2.3 继承 13
1.2.4 多态性 15
1.3 输入和输出 18
1.4 Java和指针 21
1.5 java.util中的向量 24
1.6 数据结构和面向对象编程 28
1.7 示例学习:随机存取文件 29
1.8 习题 36
1.9 编程作业 38
参考文献 40
第2章 复杂性分析 41
2.1 计算复杂性和渐近复杂性 41
2.2 大O表示法 42
2.3 大O表示法的性质 43
2.4 Ω和Θ表示法 44
2.5 可能出现的问题 45
2.6 复杂性示例 46
2.7 寻找渐近复杂性:示例 47
2.8 最好的、平均的和最坏的情况 49
2.9 补偿复杂性 51
2.10 习题 54
参考文献 57
第3章 链表 59
3.1 单向链表 59
3.1.1 插入 63
3.1.2 删除 64
3.1.3 查找 67
3.2 双向链表 67
3.3 循环链表 72
3.4 跳转表 73
3.5 自组织表 77
3.6 稀疏表 80
3.7 用java.util的链表 83
3.8 小结 86
3.9 示例学习:图书馆管理 86
3.10 习题 94
3.11 编程作业 95
参考文献 98
第4章 堆栈和队列 99
4.1 堆栈 99
4.2 队列 106
4.3 优先级队列 112
4.4 示例学习:逃离迷宫 113
4.5 习题 117
4.6 编程作业 119
参考文献 120
第5章 递归 123
5.1 递归定义 123
5.2 方法调用和递归实现 125
5.3 剖析一个递归调用 126
5.4 尾递归 129
5.5 非尾递归 130
5.6 间接递归 134
5.7 嵌套递归 135
5.8 过分递归 136
5.9 回溯 138
5.10 小结 144
5.11 示例学习:一个递归下降解释器 144
5.12 习题 150
5.13 编程作业 153
参考文献 155
第6章 二叉树 157
6.1 树、二叉树和折半查找树 157
6.2 实现二叉树 160
6.3 搜索折半查找树 162
6.4 树的遍历 164
6.4.1 广度优先遍历 164
6.4.2 深度优先遍历 165
6.4.3 无堆栈深度优先遍历 170
6.5 插入 176
6.6 删除 178
6.6.1 归并删除法 179
6.6.2 拷贝删除法 180
6.7 树的平衡 182
6.7.1 DSW算法 185
6.7.2 AVL树 187
6.8 自适应树 191
6.8.1 自调整树 191
6.8.2 扩展 192
6.9 堆 195
6.9.1 堆作为优先级队列 197
6.9.2 以堆形式组织数组 198
6.10 波兰表示法和表示树 202
6.11 示例学习:计算单词频率 205
6.12 习题 211
6.13 编程作业 213
参考文献 216
第7章 多分树 219
7.1 B树家族 219
7.1.1 B树 220
7.1.2 B?树 228
7.1.3 B+树 229
7.1.4 前缀B+树 231
7.1.5 比特树 234
7.1.6 R树 235
7.1.7 2-4树 237
7.1.8 java.util中的集合 243
7.1.9 java.util中的映像 247
7.2 线索 250
7.3 小结 257
7.4 示例学习:拼写检查程序 257
7.5 习题 266
7.6 编程作业 267
参考文献 269
第8章 图 273
8.1 图的表示法 274
8.2 图的遍历 275
8.3 最短路径 278
8.4 环路检测 286
8.5 生成树 289
8.5.1 Boruvka算法 289
8.5.2 Kruskal算法 290
8.5.3 Jarník-Prim算法 290
8.5.4 Dijkstra算法 293
8.6 连通性 293
8.6.1 无向图的连通性 294
8.6.2 有向图的连通性 296
8.7 拓扑排序 298
8.8.1 最大流 300
8.8 网络 300
8.8.2 最小代价的最大流量 309
8.9 匹配 312
8.9.1 分配问题 316
8.9.2 非二部图中的匹配 318
8.10 欧拉图和哈密顿图 320
8.10.1 欧拉图 320
8.10.2 哈密顿图 321
8.11 示例学习:典型代表问题 323
8.12 习题 330
8.13 编程作业 333
参考文献 334
第9章 排序 337
9.1 元素排序算法 338
9.1.1 插入排序 338
9.1.2 选择排序 340
9.1.3 起泡排序 341
9.2 决策树 343
9.3 高效排序算法 346
9.3.1 希尔排序 346
9.3.2 堆排序 349
9.3.3 快速排序 351
9.3.4 归并排序 356
9.3.5 基数排序 359
9.4 java.util中的排序 362
9.5 小结 365
9.6 示例学习:多项式加法 366
9.7 习题 372
9.8 编程作业 373
参考文献 374
第10章 散列 377
10.1 散列函数 377
10.1.1 除法 377
10.1.2 折叠法 378
10.1.3 平方取中散列函数 378
10.1.4 提取方法 378
10.1.5 基数变换 379
10.2 冲突解决 379
10.2.1 开放地址法 379
10.2.2 链 384
10.2.3 桶地址法 385
10.3 删除 386
10.4 理想散列函数 386
10.4.1 Cichelli方法 387
10.4.2 FHCD算法 389
10.5 可扩展文件的散列函数 391
10.5.1 可扩展散列 391
10.5.2 线性散列 393
10.6 java.util中的散列 395
10.7 示例学习 399
10.8 习题 406
10.9 编程作业 407
参考文献 408
第11章 数据压缩 411
11.1 数据压缩的条件 411
11.2 霍夫曼编码 412
11.3 Shannon-Fano码 422
11.4 运行长度编码 423
11.5 Ziv-Lempel编码 424
11.6 示例学习:结合运行长度编码的霍夫曼方法 427
11.7 习题 435
11.8 编程作业 436
参考文献 437
第12章 存储管理 439
12.1 连续适应方法 439
12.2 非连续适应方法 440
12.3 无用单元收集 448
12.3.1 标记与清除算法 448
12.3.2 拷贝方法 454
12.3.3 增量式无用单元收集 455
12.4 小结 461
12.5 示例学习:内置无用单元收集器 462
12.6 习题 469
12.7 编程作业 470
参考文献 472
附录A 大O的计算 475
人名索引 479
名词索引 483