图书介绍

数据结构与面向对象程序设计 原书第4版 C++版【2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载】

数据结构与面向对象程序设计 原书第4版 C++版
  • (美)梅因,(美)萨维特奇著;金名等译 著
  • 出版社: 北京:清华大学出版社
  • ISBN:9787302278818
  • 出版时间:2012
  • 标注页数:728页
  • 文件大小:172MB
  • 文件页数:747页
  • 主题词:数据结构-教材;C语言-程序设计-教材

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

数据结构与面向对象程序设计 原书第4版 C++版PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 软件开发的阶段1

1.1 规范说明、设计与实现2

1.1.1 概念设计:问题分解3

1.1.2 前置条件与后置条件4

1.1.3 使用由其他程序员提供的函数6

1.1.4 有关ANSI/ISO C++标准的实现问题8

1.1.5 本节自测练习11

1.2 运行时间分析12

1.2.1 台阶计数问题12

1.2.2 大O表示法16

1.2.3 C++函数的时间分析17

1.2.4 最坏情况、平均情况以及最好情况下的时间分析19

1.2.5 本节自测练习19

1.3 测试与调试20

1.3.1 选择测试数据20

1.3.2 边界值20

1.3.3 完全代码测试21

1.3.4 调试21

1.3.5 本节自测练习22

1.4 本章小结22

本章自测练习参考答案23

第2章 抽象数据类型与C++类25

2.1 类与成员25

2.1.1 编程示例:节流阀类throttle25

2.1.2 使用类29

2.1.3 throttle类的演示小程序30

2.1.4 实现成员函数31

2.1.5 可以调用其他成员的成员函数34

2.1.6 本节自测练习34

2.2 构造函数35

2.2.1 throttle类的构造函数35

2.2.2 修订throttle类的成员函数37

2.2.3 内联成员函数38

2.2.4 本节自测练习39

2.3 使用名称空间、头文件与实现文件39

2.3.1 创建名称空间40

2.3.2 头文件40

2.3.3 实现文件44

2.3.4 使用名称空间里的数据项46

2.3.5 本节自测练习48

2.4 类与参数49

2.4.1 编程示例:point类49

2.4.2 参数默认值52

2.4.3 参数53

2.4.4 当函数的返回值的数据类型为类时58

2.4.5 本节自测练习59

2.5 操作符重载60

2.5.1 二元比较操作符重载60

2.5.2 二元算术操作符重载61

2.5.3 输入输出操作符重载62

2.5.4 友元函数64

2.5.5 point类汇总66

2.5.6 操作符重载小结68

2.5.7 本节自测练习69

2.6 标准模板库与pair类69

2.7 本章小结70

本章自测练习参考答案71

编程项目73

第3章 容器类81

3.1 bag类81

3.1.1 bag类的规范说明81

3.1.2 bag类的文档说明88

3.1.3 bag类的演示程序91

3.1.4 bag类的设计93

3.1.5 类的不变式94

3.1.6 bag类的实现95

3.1.7 bag类的集成101

3.1.8 bag类的测试104

3.1.9 bag类的分析105

3.1.10 本节自测练习106

3.2 编程项目:sequence类107

3.2.1 sequence类的规范说明107

3.2.2 sequence类的文档说明111

3.2.3 sequence类的设计113

3.2.4 sequence类的伪代码实现114

3.2.5 本节自测练习116

3.3 交互式测试程序116

本节自测练习121

3.4 STL中的multiset类及其迭代器122

3.4.1 multiset模板类122

3.4.2 multiset类的一些成员123

3.4.3 迭代器与[…)模式123

3.4.4 测试迭代器的相等性126

3.4.5 multiset类的其他操作符126

3.4.6 不合法的迭代器126

3.4.7 本节自测练习128

3.5 本章小结128

本章自测练习参考答案128

编程项目131

第4章 指针与动态数组138

4.1 指针与动态内存138

4.1.1 指针变量139

4.1.2 指针与赋值操作符一起使用140

4.1.3 动态变量new操作符142

4.1.4 使用new操作符为动态数组分配内存143

4.1.5 内存堆与bad_alloc异常144

4.1.6 delete操作符145

4.1.7 本节自测练习147

4.2 把指针与数组作为参数147

4.2.1 以指针作为值参数147

4.2.2 数组参数149

4.2.3 以指针或数组作为常量参数150

4.2.4 以指针作为引用参数152

4.2.5 本节自测练习153

4.3 具有动态数组的bag类156

4.3.1 指针成员变量156

4.3.2 成员函数按需分配内存157

4.3.3 值语义161

4.3.4 析构函数163

4.3.5 修订后的bag类定义164

4.3.6 修订后的bag类实现165

4.3.7 修订后的bag类集成170

4.3.8 本节自测练习172

4.4 有关动态类的说明172

4.4.1 4条规则173

4.4.2 复制构造函数的特殊重要性173

4.4.3 本节自测练习174

4.5 STL的string类与编程项目174

4.5.1 以null结尾的字符串174

4.5.2 初始化字符串变量175

4.5.3 空字符串175

4.5.4 读写字符串变量175

4.5.5 strcpy函数176

4.5.6 strcat函数177

4.5.7 strlen函数177

4.5.8 strcmp函数178

4.5.9 string类的规范说明178

4.5.10 string类的构造函数180

4.5.11 重载operator[]181

4.5.12 其他重载成员181

4.5.13 string类的其他操作182

4.5.14 string类的设计182

4.5.15 string类的实现183

4.5.16 string类的演示程序185

4.5.17 串联输出操作符186

4.5.18 明常量对象187

4.5.19 由构造函数产生的类型转换187

4.5.20 在表达式中使用已重载的操作符187

4.5.21 本章设计的string类与C++库的string类188

4.5.22 本节自测练习188

4.6 编程项目:polynomial类188

4.7 本章小结191

本章自测练习参考答案192

编程项目194

第5章 链表196

5.1 链表的基本节点类196

5.1.1 为节点声明类196

5.1.2 在链表节点中使用typedef语句197

5.1.3 头指针和尾指针197

5.1.4 空指针NULL198

5.1.5 头指针或尾指针为NULL的含义199

5.1.6 节点类构造函数199

5.1.7 节点类成员函数200

5.1.8 成员选择操作符201

5.1.9 本节自测练习204

5.2 链表工具包205

5.2.1 链表工具包的头文件205

5.2.2 计算链表的长度206

5.2.3 链表的参数209

5.2.4 在链表头插入新节点210

5.2.5 在非链表头的其他位置插入新节点212

5.2.6 在链表中查找节点215

5.2.7 根据节点的位置在链表中寻找节点217

5.2.8 链表复制218

5.2.9 在链表头删除节点221

5.2.10 在非链表头删除节点222

5.2.11 清空链表223

5.2.12 链表工具包的集成224

5.2.13 使用链表工具包228

5.2.14 本节自测练习228

5.3 用链表实现bag类229

5.3.1 第3个bag类的规范说明229

5.3.2 第3个bag类的类定义230

5.3.3 如何使bag类的value_type与节点类的value_type相匹配233

5.3.4 在类中使用动态内存 应遵循的规则234

5.3.5 第3个bag类的实现234

5.3.6 第3个bag类的集成241

5.3.7 本节自测练习244

5.4 编程项目:用链表实现sequence类244

5.4.1 关于修订后的sequence类的设计建议245

5.4.2 关于修订后的sequence类的值语义246

5.4.3 本节自测练习246

5.5 动态数组、链表与双向链表246

5.5.1 做出抉择248

5.5.2 本节自测练习249

5.6 标准模板库的vector、list和deque类249

本节测试练习252

5.7 本章小结252

本章自测练习参考答案252

编程项目257

第6章 用模板、迭代器和STL进行软件开发261

6.1 模板函数261

6.1.1 模板函数的语法263

6.1.2 使用模板函数263

6.1.3 交换两个值的模板函数265

6.1.4 模板函数的参数匹配266

6.1.5 在数组中查找最大项的模板函数267

6.1.6 在已排序数组中插入一个数据项的模板函数268

6.1.7 本节自测练习270

6.2 模板类270

6.2.1 模板类的语法270

6.2.2 进一步了解模板类实现文件277

6.2.3 模板类成员函数的参数匹配278

6.2.4 使用模板类278

6.2.5 详细讨论上一个演示程序281

6.2.6 本节自测练习282

6.3 STL算法与迭代器的使用282

6.3.1 STL算法282

6.3.2 标准迭代器的类型283

6.3.3 数组的迭代器285

6.3.4 本节自测习题285

6.4 节点模板类286

6.4.1 返回引用类型的函数287

6.4.2 将引用返回值复制到别处时会发生什么288

6.4.3 这里成员函数data需要两个版本288

6.4.4 新节点类的头文件和实现文件289

6.4.5 本节自测练习297

6.5 链表的迭代器297

6.5.1 节点迭代器297

6.5.2 从std::iterator派生而来的节点迭代器299

6.5.3 节点迭代器的私有成员变量300

6.5.4 节点迭代器的构造函数300

6.5.5 节点迭代器的*操作符300

6.5.6 节点迭代器两个版本的++操作符300

6.5.7 节点迭代器的相等和不相等比较302

6.5.8 常量集合的迭代器302

6.5.9 本节自测练习304

6.6 含迭代器的链表版bag模板类305

6.6.1 如何为容器类提供迭代器305

6.6.2 bag类迭代器306

6.6.3 将迭代器定义在bag类中的原因307

6.6.4 本节自测练习314

6.7 本章小结与5个bag类的小结314

本章自测练习答案315

编程项目318

第7章 栈320

7.1 STL的stack类320

7.1.1 标准库的stack类321

7.1.2 编程示例:翻转单词322

7.1.3 本节自测练习323

7.2 栈的应用323

7.2.1 编程示例:括号的匹配323

7.2.2 编程示例:算术表达式求值325

7.2.3 算术表达式求值的规范说明326

7.2.4 算术表达式求值的设计326

7.2.5 算术表达式求值的实现331

7.2.6 计算器程序使用的函数332

7.2.7 算术表达式求值的测试与分析332

7.2.8 算术表达式求值的改进333

7.2.9 本节自测练习333

7.3 stack类的实现334

7.3.1 栈的数组实现334

7.3.2 栈的链表实现337

7.3.3 Koenig查找341

7.3.4 本节自测练习341

7.4 更复杂的栈应用342

7.4.1 后缀表达式求值342

7.4.2 将中缀表示法转换成后缀表示法344

7.4.3 在中缀表达式中使用优先级规则346

7.4.4 中缀转换为后缀的正确性348

7.4.5 本节自测练习349

7.5 本章小结349

本章自测练习答案350

编程项目351

第8章 队列356

8.1 STL队列356

8.1.1 标准库的队列类357

8.1.2 队列的使用358

8.1.3 本节自测练习359

8.2 队列的应用359

8.2.1 编程示例:识别回文359

8.2.2 本节自测练习361

8.2.3 编程示例:洗车模拟程序362

8.2.4 洗车模拟程序的规范说明362

8.2.5 洗车模拟程序的设计362

8.2.6 实现洗车类365

8.2.7 实现模拟函数371

8.2.8 本节自测练习372

8.3 队列类的实现373

8.3.1 队列的数组实现373

8.3.2 有关队列中环形数组实现的讨论377

8.3.3 队列的链表实现379

8.3.4 实现细节380

8.3.5 本节自测练习384

8.4 实现STL的双端队列384

8.4.1 为双端队列的value_type项调用析构函数和构造函数387

8.4.2 栈和队列的其他变体388

8.4.3 本节自测练习388

8.5 栈、队列和优先队列类的引用返回值388

8.6 本章小结389

本章自测练习答案389

编程项目390

第9章 递归思想394

9.1 递归函数394

9.1.1 递归思想的第一个例子394

9.1.2 跟踪递归调用396

9.1.3 编程示例:write_vertical的一个扩展397

9.1.4 深入分析递归398

9.1.5 成功递归函数的一般形式401

9.1.6 本节自测练习402

9.2 递归的研究:分形和迷宫402

9.2.1 编程示例:产生随机分形403

9.2.2 产生随机分形的函数及其规范说明404

9.2.3 分形函数的设计和实现405

9.2.4 如何显示随机分形407

9.2.5 编程示例:穿越迷宫407

9.2.6 穿越迷宫函数的规范说明408

9.2.7 穿越迷宫函数的设计409

9.2.8 穿越迷宫函数的实现410

9.2.9 运用回溯穷举搜索的递归模式412

9.2.10 编程示例:玩具熊游戏413

9.2.11 本节自测练习414

9.3 推导递归415

9.3.1 如何确保没有无限递归417

9.3.2 归纳推导递归函数的正确性419

9.3.3 本节自测练习419

9.4 本章小结420

本章自测练习答案420

编程项目422

第10章 树427

10.1 树的简介427

10.1.1 二叉树427

10.1.2 二叉分类树430

10.1.3 一般树430

10.1.4 本节自测练习431

10.2 树的表示法431

10.2.1 完全二叉树的数组表示法432

10.2.2 使用节点类表示二叉树433

10.2.3 本节自测练习434

10.3 二叉树节点类435

10.3.1 编程示例:猜测动物程序439

10.3.2 猜测动物程序的设计与实现440

10.3.3 猜测动物程序的改进448

10.3.4 本节自测练习448

10.4 树的遍历449

10.4.1 二叉树的遍历449

10.4.2 从树的节点中输出数据453

10.4.3 遍历中的问题454

10.4.4 函数作为参数454

10.4.5 apply函数的一个模板版本456

10.4.6 使apply模板函数更具有通用性457

10.4.7 树遍历的模板函数458

10.4.8 本节自测练习465

10.5 二叉查找树466

10.5.1 二叉查找树存储机制466

10.5.2 第6个bag类的定义470

10.5.3 第6个bag类的某些简单函数的实现470

10.5.4 计算某个元素在二叉查找树中出现的次数471

10.5.5 添加一个新元素到二叉查找树中472

10.5.6 从二叉查找树中删除某个元素473

10.5.7 二叉查找树的组合操作符475

10.5.8 时间分析和迭代器477

10.5.9 本节自测练习478

10.6 本章小结478

本章自测练习答案479

编程项目482

第11章 平衡树487

11.1 堆487

11.1.1 堆的存储规则487

11.1.2 使用堆结构实现的优先队列488

11.1.3 插入新项488

11.1.4 删除项489

11.2 STL优先队列与堆算法491

本节自测练习492

11.3 B树492

11.3.1 非平衡树的问题493

11.3.2 B树的规则493

11.3.3 B树的一个示例495

11.3.4 用B树实现set类495

11.3.5 在B树中查找项499

11.3.6 在B树中插入项501

11.3.7 B树的松散插入操作501

11.3.8 修正子节点多余项的私有成员函数503

11.3.9 回到成员函数Insert504

11.3.10 采用自顶向下方法设计505

11.3.11 从B树中删除项505

11.3.12 B树的松散删除操作506

11.3.13 解决子节点项短缺问题的私有成员函数508

11.3.14 从B树中删除最大的项510

11.3.15 外部B树512

11.3.16 本节自测练习512

11.4 树、日志和时间分析513

11.4.1 二叉查找树的时间分析513

11.4.2 堆的时间分析514

11.4.3 对数运算515

11.4.4 对数级算法516

11.4.5 本节自测练习516

11.5 STL的map类和multimap类517

11.6 本章小结518

本章自测练习答案518

编程项目521

第12章 查找523

12.1 顺序查找和二叉查找523

12.1.1 顺序查找523

12.1.2 顺序查找的分析523

12.1.3 二叉查找525

12.1.4 二叉查找的设计526

12.1.5 二叉查找的分析528

12.1.6 标准库的查找函数531

12.1.7 用于有序区间的函数531

12.1.8 用于无序区间的函数532

12.1.9 STL的search函数533

12.1.10 本节自测练习534

12.2 开地址散列534

12.2.1 散列简介534

12.2.2 表类的声明536

12.2.3 表类的设计538

12.2.4 表ADT的实现541

12.2.5 选择散列函数来减少冲突547

12.2.6 再散列减少聚类547

12.2.7 本节自测练习548

12.3 链式散列549

本节自测练习551

12.4 散列的时间分析551

12.4.1 散列表的装填因子551

12.4.2 本节自测练习553

12.5 程序设计:使用STL向量的表类553

12.5.1 新表类553

12.5.2 在新表类中使用向量554

12.5.3 常量模板参数554

12.5.4 函数模板参数554

12.5.5 实现新表类555

12.5.6 本节自测练习556

12.6 TR1库扩展中的散列表556

12.7 本章小结557

本章自测练习答案557

编程项目561

第13章 排序563

13.1 二次排序算法563

13.1.1 选择排序的规范说明563

13.1.2 选择排序的设计563

13.1.3 选择排序的实现565

13.1.4 选择排序的效率分析567

13.1.5 插入排序569

13.1.6 插入排序的效率分析571

13.1.7 本节自测练习573

13.2 递归排序算法574

13.2.1 使用递归的分治法574

13.2.2 归并排序576

13.2.3 归并函数577

13.2.4 动态内存在归并排序中的应用581

13.2.5 归并排序的效率分析582

13.2.6 文件的归并排序583

13.2.7 快速排序584

13.2.8 partition函数585

13.2.9 快速排序的效率分析588

13.2.10 为快速排序选择一个好的基准元素589

13.2.11 本节自测练习589

13.3 使用堆的O(n log n)算法590

13.3.1 堆排序590

13.3.2 构建堆595

13.3.3 向下重排596

13.3.4 堆排序的效率分析597

13.3.5 本节自测练习598

13.4 STL的排序与二叉查找598

13.4.1 原始C标准库函数qsort598

13.4.2 STL的排序函数599

13.4.3 STL的堆排序600

13.4.4 STL的二叉查找函数600

13.4.5 用于STL排序函数的比较参数601

13.4.6 使用迭代器编写一个自己的排序函数601

13.5 本章小结602

本章自测练习答案603

编程项目605

第14章 派生类与继承610

14.1 派生类610

14.1.1 如何声明派生类612

14.1.2 派生类的自动构造函数613

14.1.3 使用派生类614

14.1.4 派生类的自动赋值操作符615

14.1.5 派生类的自动析构函数616

14.1.6 覆盖继承的成员函数616

14.1.7 本节自测练习617

14.2 仿真生态系统618

14.2.1 实现部分生物对象层次618

14.2.2 organism类618

14.2.3 animal类:具有新私有成员变量的派生类621

14.2.4 如何为派生类提供新构造函数622

14.2.5 animal类的其他成员函数623

14.2.6 本节自测练习627

14.2.7 herbivore类628

14.2.8 池塘生态仿真程序630

14.2.9 池塘生态系统的实现细节634

14.2.10 使用池塘模型634

14.2.11 动态内存的使用635

14.2.12 本节自测练习636

14.3 虚拟成员函数和game类636

14.3.1 game类简介636

14.3.2 受保护的成员640

14.3.3 虚拟成员函数640

14.3.4 虚拟析构函数641

14.3.5 game类的受保护虚拟成员函数641

14.3.6 实现Connect Four游戏的派生类642

14.3.7 connect4类的私有成员变量642

14.3.8 connect4类的构造函数和restart函数644

14.3.9 处理游戏状态的三个函数644

14.3.10 处理移动的三个函数645

14.3.11 clone函数646

14.3.12 编写派生自game类的游戏646

14.3.13 game类的play算法647

14.3.14 本节自测练习650

14.4 本章小结650

进阶阅读650

本章自测练习答案651

编程项目655

第15章 图657

15.1 图的定义657

15.1.1 无向图657

15.1.2 有向图660

15.1.3 图的更多术语661

15.1.4 航线的例子661

15.1.5 本节自测练习662

15.2 图的实现663

15.2.1 使用邻接矩阵表示图663

15.2.2 使用二维数组存储邻接矩阵663

15.2.3 使用边列表表示图664

15.2.4 使用边集表示图665

15.2.5 哪种表示方法最好665

15.2.6 编程示例:标签图类665

15.2.7 用于增加顶点和边的成员函数666

15.2.8 标签图类——重载下标操作符667

15.2.9 下标操作符的常量版本668

15.2.10 标签图类——函数neighbors668

15.2.11 标签图类的实现669

15.2.12 本节自测练习674

15.3 图的遍历674

15.3.1 深度优先搜索675

15.3.2 宽度优先搜索677

15.3.3 深度优先搜索的实现679

15.3.4 宽度优先搜索的实现680

15.3.5 本节自测练习682

15.4 路径算法683

15.4.1 判断某条路径是否存在683

15.4.2 具有加权边的图683

15.4.3 最短距离算法684

15.4.4 最短路径算法691

15.4.5 本节自测练习691

15.5 本章小结692

本章自测练习答案692

编程项目693

附录697

附录A ASCII字符集697

附录B 大O表达式698

附录C 操作符的优先顺序700

附录D 命令行编译和链接701

附录E 使用老式编译器701

附录F C++的输入和输出701

附录G 选择库函数708

附录H 标准模板类简介711

附录I 一些有用函数的工具包720

附录J 基本风格指南723

附录K 下载GNU编译器和软件723

附录L 异常处理724

热门推荐