《C++数据抽象和问题求解 第6版》PDF下载

  • 购买积分:21 如何计算积分?
  • 作  者:(美)卡拉拉(CarranoF.M.),(美)亨利(HenryL.)著;景丽译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2013
  • ISBN:9787302335993
  • 页数:779 页
图书介绍:本书作为该经典教材的第6版,更加强调数据抽象并将其作为问题解决工具;强调C++作为实施工具;减少章节的相互依赖性,允许教师有更多的灵活性;演示了安全、可靠的编程实践;包括Python到C++的转换指导。

第1章 数据抽象:墙 1

1.1 面向对象的概念 2

1.1.1 面向对象分析与设计 2

1.1.2 面向对象解决方案的特征 3

1.2 获得更好的解决方案 4

1.2.1 内聚 5

1.2.2 耦合 5

1.3 规范 6

1.3.1 操作契约 7

1.3.2 特殊情况 8

1.3.3 抽象 9

1.3.4 信息隐藏 10

1.3.5 最小且完整的接口 11

1.4 抽象数据类型 12

1.4.1 设计ADT 14

1.4.2 涉及其他ADT的ADT 17

1.5 ADT包 18

1.5.1 确定行为 18

1.5.2 指定数据和操作 19

1.5.3 ADT的模板接口 22

1.5.4 使用ADT包 24

C++片段1 C++类 29

C1.1 待解决的问题 30

C1.1.1 私有数据字段 31

C1.1.2 构造函数和析构函数 32

C1.1.3 方法 32

C1.1.4 防止编译错误 33

C1.2 实现解决方案 34

C1.3 模板 35

C1.4 继承 37

C1.4.1 基类和派生类 38

C1.4.2 重写基类方法 40

C1.5 虚方法和抽象类 42

C1.5.1 虚方法 42

C1.5.2 抽象类 43

第2章 递归:镜子 45

2.1 递归解决方案 46

2.2 返回值的递归 48

2.2.1 递归值函数:n的阶乘 49

2.2.2 箱式跟踪 52

2.3 执行动作的递归 55

2.4 递归与数组 62

2.4.1 逆置数组项 63

2.4.2 折半查找 64

2.4.3 查找数组中的最大值 68

2.4.4 查找数组中第k个最小值 69

2.5 组织数据 71

2.6 更多示例 75

2.6.1 Fibonacci数列(兔子繁殖) 75

2.6.2 组织游行队伍 78

2.6.3 从n个事物中选出k个 79

2.7 递归和效率 81

第3章 基于数组的实现 91

3.1 办法 92

3.1.1 核心方法 93

3.1.2 使用大小固定的数组 93

3.2 ADT包的基于数组的实现 94

3.2.1 头文件 95

3.2.2 定义核心方法 96

3.2.3 测试核心方法 98

3.2.4 实现更多方法 101

3.2.5 删除项的方法 103

3.2.6 测试 106

3.3 在实现中使用递归 107

3.3.1 getIndexOf方法 107

3.3.2 getFrequencyOf方法 108

C++片段2 指针、多态和内存分配 113

C2.1 变量的内存分配和方法的前期绑定 114

C2.2 需要解决的问题 115

C2.3 指针与程序的自由存储 116

C2.3.1 释放内存 118

C2.3.2 避免内存泄漏 119

C2.3.3 避免悬挂指针 122

C2.4 虚方法和多态 124

C2.5 数组的动态分配 126

第4章 基于链表的实现 129

4.1 预备知识 130

4.2 ADT包的基于链表的实现 133

4.2.1 头文件 134

4.2.2 定义核心方法 135

4.2.3 实现更多方法 138

4.3 在基于链表的实现中使用递归 143

4.4 测试多个ADT实现 145

4.5 比较基于数组的实现和基于链表的实现 148

第5章 作为问题求解技术的递归 155

5.1 定义语言 156

5.1.1 语法知识基础 156

5.1.2 两种简单的语言 158

5.2 代数表达式 160

5.2.1 代数表达式的类型 160

5.2.2 前缀表达式 162

5.2.3 后缀表达式 166

5.2.4 完全括号化表达式 168

5.3 回溯 168

5.3.1 查找航线 168

5.3.2 八皇后问题 173

5.4 递归和数学归纳法的关系 179

5.4.1 递归阶乘函数的正确性 179

5.4.2 Hanoi塔的工作量 180

第6章 栈 189

6.1 ADT栈 190

6.1.1 在设计解决方案期间开发ADT 190

6.1.2 ADT栈的规范 192

6.2 栈的简单应用 197

6.2.1 检查括号匹配 197

6.2.2 识别语言中的字符串 199

6.3 栈在代数表达式中的应用 200

6.3.1 计算后缀表达式 201

6.3.2 中缀表达式与后缀表达式的等价转换 202

6.4 使用栈查找航班图 205

6.5 栈和递归的关系 212

C++片段3 异常 221

C3.1 背景知识 222

C3.2 断言 223

C3.3 抛出异常 224

C3.4 处理异常 227

C3.4.1 多个catch块 228

C3.4.2 未捕获的异常 229

C3.5 程序员定义的异常类 232

第7章 实现ADT栈 235

7.1 基于数组的实现 236

7.2 基于链表的实现 239

7.3 在实现中使用异常 243

第8章 列表 247

8.1 指定ADT列表 248

8.2 使用列表操作 252

8.3 ADT列表的模板接口 255

第9章 实现列表 259

9.1 基于数组的ADT列表实现 260

9.1.1 头文件 261

9.1.2 实现文件 262

9.2 基于链表的ADT列表实现 266

9.2.1 头文件 266

9.2.2 实现文件 268

9.2.3 在LinkedList的方法中使用递归 275

9.3 两种实现的比较 279

第10章 算法的效率 283

10.1 什么是好的解决方案 284

10.2 测量算法的效率 285

10.2.1 算法的执行时间 286

10.2.2 算法增长率 287

10.2.3 分析与大O表示法 288

10.2.4 正确分析问题 291

10.2.5 查找算法的效率 293

第11章 排序算法及其效率 299

11.1 基本排序算法 300

11.1.1 选择排序 300

11.1.2 起泡排序 303

11.1.3 插入排序 305

11.2 较快排序算法 307

11.2.1 归并排序 307

11.2.2 快速排序 312

11.2.3 基数排序 319

11.3 各种排序算法的比较 321

C++片段4 类关系和重用 325

C4.1 回顾继承 326

C4.1.1 类的公有、私有和受保护部分 331

C4.1.2 公有、私有和受保护继承 332

C4.1.3 is-a和as-a关系 333

C4.2 包含:has-a关系 334

C4.3 回顾抽象基类 335

第12章 有序表及其实现 339

12.1 指定ADT有序表 340

12.1.1 ADT有序表的模板接口 342

12.1.2 使用有序表的操作 343

12.2 基于链表的实现 344

12.2.1 头文件 344

12.2.2 实现文件 345

12.2.3 基于链表的实现的效率 348

12.3 使用ADT列表的实现 348

12.3.1 包含 349

12.3.2 公有继承 352

12.3.3 私有继承 356

第13章 队列和优先队列 363

13.1 ADT队列 364

13.2 ADT队列的简单应用 367

13.2.1 读取字符串 367

13.2.2 识别回文 368

13.3 ADT优先队列 369

13.4 应用:模拟 371

13.5 面向位置和面向值的ADT 379

第14章 队列和优先队列的实现 387

14.1 ADT队列的实现 388

14.1.1 使用ADT列表的实现 388

14.1.2 基于链表的实现 390

14.1.3 基于数组的实现 394

14.1.4 比较实现 399

14.2 ADT优先队列的实现 400

C++片段5 运算符重载和友元访问 405

C5.1 重载运算符 406

C5.1.1 重载=进行赋值 408

C5.1.2 重载+进行连接 410

C5.2 友元访问和<<的重载 411

第15章 树 415

15.1 术语 416

15.1.1 树的类型 417

15.1.2 树的高度 419

15.1.3 满二叉树、完全二叉树和平衡二叉树 421

15.1.4 二叉树的最大和最小高度 422

15.2 ADT二叉树 425

15.2.1 二叉树的遍历 425

15.2.2 二叉树的操作 428

15.2.3 ADT二叉树的模板接口 430

15.3 ADT二叉查找树 432

15.3.1 二叉查找树的操作 433

15.3.2 查找二叉查找树 434

15.3.3 创建二叉查找树 435

15.3.4 遍历二叉查找树 437

15.3.5 二叉查找树操作的效率 437

第16章 树的实现 443

16.1 二叉树中的节点 444

16.1.1 基于数组的表示 444

16.1.2 基于链表的表示 446

16.2 ADT二叉树基于链表的实现 447

16.2.1 头文件 447

16.2.2 实现 450

16.3 ADT二叉查找树基于链表的实现 458

16.3.1 ADT二叉查找树操作的算法 458

16.3.2 BinarySearchTree类 469

16.4 在文件中保存二叉查找树 471

16.5 树排序 474

16.6 一般树 474

C++片段6 迭代器 479

C6.1 迭代器 480

C6.1.1 常见的迭代器操作 481

C6.1.2 使用迭代器操作 482

C6.1.3 实现迭代器 483

C6.2 迭代器的高级功能 485

第17章 堆 489

17.1 ADT堆 490

17.2 堆的基于数组的实现 493

17.2.1 基于数组的堆操作的算法 494

17.2.2 实现 498

17.3 ADT优先队列的堆实现 502

17.4 堆排序 504

第18章 字典及其实现 511

18.1 ADT字典 512

18.2 可能的实现 517

18.2.1 ADT字典的基于数组的有序实现 519

18.2.2 ADT字典的二叉查找树实现 521

18.3 选择实现 523

18.4 散列 529

18.4.1 散列函数 532

18.4.2 解决冲突 534

18.4.3 散列的效率 539

18.4.4 如何确立散列函数 542

18.4.5 字典遍历:散列的低效操作 543

18.4.6 使用散列和分离链实现ADT字典 544

第19章 平衡查找树 551

19.1 平衡查找树 552

19.2 2-3树 553

19.2.1 遍历2-3树 555

19.2.2 查找2-3树 556

19.2.3 在2-3树中插入数据 558

19.2.4 从2-3树中删除数据 562

19.3 2-3-4树 567

19.3.1 查找和遍历2-3-4树 569

19.3.2 在2-3-4树中插入数据 569

19.3.3 从2-3-4树中删除数据 572

19.4 红-黑树 573

19.4.1 查找和遍历红-黑树 575

19.4.2 红-黑树的插入和删除 575

19.5 AVL树 577

第20章 图 583

20.1 术语 584

20.2 将图作为ADT 587

20.3 图的遍历 591

20.3.1 深度优先查找 592

20.3.2 广度优先查找 593

20.4 图的应用 595

20.4.1 拓扑排序 595

20.4.2 生成树 598

20.4.3 最小生成树 600

20.4.4 最短路径 603

20.4.5 回路 606

20.4.6 一些复杂问题 608

第21章 外部存储中的数据处理 615

21.1 了解外部存储 616

21.2 排序外部文件的数据 618

21.3 外部字典 624

21.3.1 确定外部文件的索引 626

21.3.2 外部散列 629

21.3.3 B-树 632

21.3.4 遍历 639

21.3.5 多索引 640

C++片段7 标准模板库 647

C7.1 STL容器 648

C7.1.1 STL容器适配器 649

C7.1.2 顺序容器 650

C7.1.3 关联容器 654

C7.2 STL算法 657

附录A 回顾C++基础 659

附录B 编程中的重要主题 697

附录C 统一建模语言 719

附录D 软件生命周期 727

附录E 数学归纳法 733

附录F 算法验证 737

附录G C++文件基础 741

附录H C++头文件和标准函数 751

附录I C++文档系统 755

附录J ASCII字符代码 757

附录K 针对Java编程人员的C++知识 759

附录L 针对Python编程人员的C++知识 767