第1部分 问题解决技术 1
第1章 编程原理与软件工程 3
1.1 问题求解与软件工程 3
1.2 模块化设计 11
1.3 关键编程问题 18
1.4 小结 31
1.5 提示 32
1.6 自我测试题 32
1.7 练习题 33
1.8 编程问题 35
第二章 递归:镜子 37
2.1 递归解决方案 37
2.2 计数 52
2.3 数组查找 57
2.4 组织数据 64
2.5 递归与效率 69
2.6 小结 72
2.7 提示 72
2.8 自我测试题 73
2.9 练习题 73
2.10 编程问题 79
第三章 数据抽象:墙 80
3.1 抽象数据类型 80
3.2 指定ADT 83
3.3 实现ADT 94
3.4 小结 112
3.5 提示 113
3.6 自我测试题 113
3.7 练习题 114
3.8 编程问题 116
第3章 链表 117
4.1 预备知识 117
4.2 链表编程 125
4.3 链表的各种变化 148
4.4 清单应用程序 152
4.5 C++标准模板库 156
4.6 小结 162
4.7 提示 164
4.8 自我测试题 165
4.9 练习题 167
4.10 编程问题 169
第五章 递归问题解决技术 172
5.1 回溯 172
5.2 定义语言 178
5.3 递归和数学归纳法的关系 189
5.4 小结 191
5.5 提示 192
5.6 自我测试题 192
5.7 练习题 192
5.8 编程问题 195
第2部分 使用抽象数据类型解决问题 201
第六章 栈 201
6.1 抽象数据类型 201
6.2 ADT栈的简单应用 206
6.3 ADT栈的实现 209
6.4 应用:代数表达式 223
6.5 应用:查找问题 227
6.6 栈和递归的关系 236
6.7 小结 238
6.8 提示 238
6.9 自我测试题 238
6.10 练习题 239
6.11 编程问题 242
第七章 队列 247
7.1 ADT队列 247
7.2 ADT队列的简单应用 249
7.3 实现ADT队列 251
7.4 基于位置的ADT总览 266
7.5 模拟应用 267
7.6 小结 275
7.7 提示 275
7.8 自我测试题 275
7.9 练习题 276
7.10 编程问题 278
第8章 类关系 282
8.1 继承 282
8.2 虚函数和后期绑定 290
8.3 友元 297
8.4 ADT列表和有序表 299
8.5 类模板 304
8.6 重载运算符 310
8.7 迭代器 313
8.8 小结 318
8.9 提示 319
8.10 自我测试题 319
8.11 练习题 319
8.12 编程问题 323
第9章 算法效率和排序 325
9.1 确定算法效率 325
9.2 排序算法及其效率 333
9.3 小结 359
9.4 提示 360
9.5 自我测试题 360
9.6 练习题 361
9.7 编程问题 363
第10章 树 366
10.1 术语 366
10.2 ADT二叉树 372
10.3 ADT二叉查找树 393
10.4 一般树 424
10.5 小结 426
10.6 提示 426
10.7 自我测试题 427
10.8 练习题 428
10.9 编程问题 433
第11章 表和优先队列 435
11.1 ADT表 435
11.2 ADT优先队列:ADT表的变体 451
11.3 STL中的表和优先队列 466
11.3 小结 477
11.4 提示 476
11.5 自我测试题 476
11.6 练习题 479
11.7 编程问题 482
第十二章 表的高级实现 483
12.1 平衡查找树 483
12.2 散列 510
12.3 按多种形式组织数据 528
12.4 小结 531
12.5 提示 532
12.6 自我测试题 532
12.7 练习题 533
12.8 编程问题 535
第13章 图 536
13.1 术语 536
13.2 将图作为ADT 538
13.3 图的遍历 544
13.4 图的应用 550
13.5 小结 563
13.6 提示 564
13.7 自我测试题 564
13.8 练习题 565
13.9 编程问题 567
第14章 外部方法 569
14.1 了解外部存储 569
14.2 排序外部文件的数据 571
14.3 外部表 577
14.4 小结 594
14.5 提示 594
14.6 自我测试题 595
14.7 练习题 595
14.8 编程问题 597
附录A C++基础 599
附录B ASCll字符代码 653
附录C C++头文件和标准函数 655
附录D 数学归纳法 659
附录E 标准模板库 663
术语表 673
自我测试题答案 690