图书介绍

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

数据结构与面向对象程序设计 C++版
  • (美)Michael Main,(美)Walter Savitch著;刘东,张丽译 著
  • 出版社: 北京:清华大学出版社
  • ISBN:7302152640
  • 出版时间:2007
  • 标注页数:737页
  • 文件大小:100MB
  • 文件页数:760页
  • 主题词:数据结构;C语言-程序设计

PDF下载


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

下载说明

数据结构与面向对象程序设计 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/ISOC++标准的实现问题7

1.1.5 自测习题12

1.2 运行时间分析13

1.2.1 台阶计数问题13

1.2.2 大O表示法17

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

1.2.4 最坏情况、平均情况和最好情况下的时间分析20

1.2.5 自测习题20

1.3 测试和调试21

1.3.1 选择测试数据21

1.3.2 边界值22

1.3.3 完全代码测试22

1.3.4 调试23

1.3.5 自测习题23

1.4 本章小结24

1.5 自测习题答案24

第2章 抽象数据类型和C++类27

2.1 类和成员28

2.1.1 编程示例:节流阀类28

2.1.2 使用类31

2.1.3 节流阀类的示范程序33

2.1.4 实现成员函数34

2.1.5 自测习题37

2.2 构造函数37

2.2.1 节流阀类的构造函数38

2.2.2 修改节流阀类的成员函数40

2.2.3 内联成员函数41

2.2.4 自测习题42

2.3 使用命名空间、头文件和实现文件42

2.3.1 创建命名空间42

2.3.2 头文件43

2.3.3 实现文件47

2.3.4 使用命名空间中的数据项49

2.3.5 自测习题51

2.4 类和参数52

2.4.1 编程示例:point类52

2.4.2 默认参数55

2.4.3 参数57

2.4.4 当函数返回值的类型是类时62

2.4.5 自测习题63

2.5 操作符重载64

2.5.1 重载二元比较操作符64

2.5.2 重载二元算术操作符65

2.5.3 重载输出和输入操作符66

2.5.4 友元函数69

2.5.5 Point类——内容汇总70

2.5.6 操作符重载的总结72

2.5.7 自测习题73

2.6 本章小结73

2.7 自测习题答案74

2.8 编程项目77

第3章 容器类85

3.1 包类85

3.1.1 包类——规范说明86

3.1.2 包类——文档说明92

3.1.3 包类——示范程序93

3.1.4 包类——设计95

3.1.5 类的不变式96

3.1.6 包类——实现97

3.1.7 包类——内容汇总103

3.1.8 包类——测试106

3.1.9 包类——分析107

3.1.10 自测习题108

3.2 编程项目:序列类109

3.2.1 序列类——规范说明109

3.2.2 序列类——文档说明112

3.2.3 序列类——设计114

3.2.4 序列类——实现的伪代码115

3.2.5 自测习题117

3.3 交互式测试程序117

3.4 本章小结122

3.5 自测习题答案123

3.6 编程项目125

第4章 指针和动态数组131

4.1 指针和动态内存131

4.1.1 指针变量132

4.1.2 使用指针的赋值操作符134

4.1.3 动态变量和new操作符135

4.1.4 使用new分配动态数组136

4.1.5 堆和bad_alloc异常138

4.1.6 操作符delete139

4.1.7 自测习题140

4.2 指针和数组作为参数141

4.2.1 指针作为值参数141

4.2.2 数组参数143

4.2.3 指针或数组作为常量参数144

4.2.4 指针作为引用参数145

4.2.5 自测习题147

4.3 用动态数组实现的包类149

4.3.1 指针成员变量150

4.3.2 成员函数按需分配动态内存151

4.3.3 值语义154

4.3.4 析构函数156

4.3.5 修改后的包类——类定义157

4.3.6 修改后的包类——实现159

4.3.7 修改后的包类——内容汇总163

4.3.8 自测习题165

4.4 有关动态类的规定166

4.4.1 4条规则166

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

4.4.3 自测习题167

4.5 编程项目:字符串类167

4.5.1 以null终结的字符串167

4.5.2 初始化字符串变量168

4.5.3 空字符串168

4.5.4 读写字符串变量169

4.5.5 函数strcpy169

4.5.6 函数strcat170

4.5.7 函数strlen170

4.5.8 函数strcmp171

4.5.9 字符串类——规范说明171

4.5.10 字符串类——设计175

4.5.11 字符串类——实现175

4.5.12 字符串类的示范程序177

4.5.13 串接输出操作符178

4.5.14 声明常量对象179

4.5.15 产生构造函数的转换179

4.5.16 在表达式中使用重载的操作符180

4.5.17 本文的字符串类与C++库中的字符串类180

4.5.18 自测习题180

4.6 编程项目:多项式180

4.7 本章小结184

4.8 自测习题答案184

4.9 编程项目186

第5章 链表189

5.1 链表的基本节点类189

5.1.1 为节点声明类190

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

5.1.3 头指针和尾指针191

5.1.4 空指针192

5.1.5 头指针或尾指针为NULL时的含义193

5.1.6 节点构造函数193

5.1.7 节点成员函数194

5.1.8 成员选择操作符195

5.1.9 自测习题198

5.2 链表工具包199

5.2.1 链表工具包——头文件199

5.2.2 计算链表的长度200

5.2.3 链表的参数203

5.2.4 在链表头插入一个新节点204

5.2.5 在非头节点处插入一个新节点206

5.2.6 在链表中查找数据项210

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

5.2.8 复制链表212

5.2.9 从链表头删除节点215

5.2.10 删除链表中不在头部的节点216

5.2.11 清除链表217

5.2.12 链表工具包——内容汇总218

5.2.13 使用链表工具包222

5.2.14 自测习题222

5.3 用链表实现的包类223

5.3.1 第三个包——规范说明223

5.3.2 第三个包——类定义223

5.3.3 如何匹配包的value_type和节点的value_type226

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

5.3.5 第三个包类——实现227

5.3.6 第三个包类——内容汇总234

5.3.7 自测习题236

5.4 编程项目:用链表实现的序列类237

5.4.1 修改的序列类——设计建议237

5.4.2 修改后的序列类——值语义238

5.4.3 自测习题239

5.5 动态数组、链表和双向链表239

5.5.1 做出抉择241

5.5.2 自测习题241

5.6 本章小结241

5.7 自测习题答案242

5.8 编程项目246

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

6.1 模板函数251

6.1.1 模板函数的语法253

6.1.2 使用模板函数253

6.1.3 模板函数——交换两个值255

6.1.4 模板函数的参数匹配256

6.1.5 模板函数——在数组中寻找最大项257

6.1.6 模板函数——在排序数组中插入一个数据项258

6.1.7 自测习题260

6.2 模板类260

6.2.1 模板类的语法260

6.2.2 关于模板实现文件的其他内容262

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

6.2.4 使用模板类267

6.2.5 编故事程序的细节270

6.2.6 自测习题270

6.3 标准模板类及其迭代器271

6.3.1 多集模板类271

6.3.2 多集成员272

6.3.3 迭代器和[...)模式272

6.3.4 测试迭代器的等同性274

6.3.5 其他多集操作274

6.3.6 集合算法275

6.3.7 无效的迭代器276

6.3.8 迭代器的标准类别277

6.3.9 数组的迭代器278

6.3.10 标准模板库列表类279

6.3.11 自测习题280

6.4 节点模板类280

6.4.1 返回引用类型的函数281

6.4.2 将引用返回值复制到别处时发生的情况283

6.4.3 成员函数data目前需要两个版本283

6.4.4 新节点的头文件和实现文件283

6.4.5 自测习题290

6.5 链表的迭代器291

6.5.1 节点迭代器291

6.5.2 节点迭代器源自std∷iterator293

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

6.5.4 节点迭代器——构造函数293

6.5.5 节点迭代器——*操作符293

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

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

6.5.8 常量集合的迭代器296

6.5.9 自测习题297

6.6 含有迭代器的包模板类的链表版本298

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

6.6.2 包迭代器299

6.6.3 将迭代器定义在包中的原因299

6.6.4 自测习题306

6.7 本章小结和5个包的总结306

6.8 自测习题答案307

6.9 编程项目311

第7章 堆栈313

7.1 堆栈和STL堆栈的简介313

7.1.1 标准库的堆栈类315

7.1.2 编程示例:翻转单词316

7.1.3 自测习题316

7.2 堆栈的应用317

7.2.1 编程示例:括号的平衡317

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

7.2.3 算术表达式求值——规范说明319

7.2.4 算术表达式求值——设计319

7.2.5 算术表达式求值——实现325

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

7.2.7 算术表达式求值——测试与分析325

7.2.8 算术表达式求值——改进326

7.2.9 自测习题326

7.3 堆栈类的实现327

7.3.1 堆栈的数组实现327

7.3.2 堆栈的链表实现330

7.3.3 Koenig查找333

7.3.4 自测习题333

7.4 更复杂的堆栈应用334

7.4.1 后缀表达式求值334

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

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

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

7.4.5 自测习题341

7.5 本章小结342

7.6 自测习题答案342

7.7 编程项目344

第8章 队列349

8.1 队列和STL队列的简介349

8.1.1 标准库的队列类350

8.1.2 队列的使用350

8.1.3 自测习题352

8.2 队列的应用352

8.2.1 编程示例:识别回文352

8.2.2 自测习题355

8.2.3 编程示例:洗车模拟355

8.2.4 洗车模拟——规范说明355

8.2.5 洗车模拟——设计355

8.2.6 洗车模拟——实现洗车类358

8.2.7 洗车模拟——实现模拟函数363

8.2.8 自测习题365

8.3 队列类的实现365

8.3.1 队列的数组实现365

8.3.2 有关队列中循环数组实现的讨论369

8.3.3 队列的链表实现371

8.3.4 实现细节372

8.3.5 自测习题377

8.4 优先队列377

8.4.1 如何指定优先级378

8.4.2 标准库的优先队列类378

8.4.3 优先队列类——实现思想379

8.4.4 自测习题379

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

8.6 本章小结380

8.7 自测习题答案380

8.8 编程项目381

第9章 递归思想385

9.1 递归函数385

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

9.1.2 跟踪递归调用387

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

9.1.4 深入分析递归389

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

9.1.6 自测习题392

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

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

9.2.2 用于产生随机分形的函数——规范说明395

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

9.2.4 如何显示随机分形398

9.2.5 编程示例:穿越迷宫399

9.2.6 穿越迷宫——规范说明399

9.2.7 穿越迷宫——设计401

9.2.8 穿越迷宫——实现401

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

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

9.2.11 自测习题406

9.3 推导递归406

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

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

9.3.3 自测习题411

9.4 本章小结411

9.5 自测习题答案412

9.6 编程项目414

第10章 树419

10.1 树的简介419

10.1.1 二叉树419

10.1.2 二叉分类树422

10.1.3 一般树422

10.1.4 自测习题423

10.2 树的表示法424

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

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

10.2.3 自测习题428

10.3 二叉树节点类429

10.3.1 编程示例:猜动物432

10.3.2 动物猜测程序——设计和实现434

10.3.3 动物猜测程序——改进438

10.3.4 自测习题441

10.4 树的遍历441

10.4.1 二叉树的遍历441

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

10.4.3 遍历中的问题446

10.4.4 函数作为参数447

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

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

10.4.7 树遍历的模板函数450

10.4.8 自测习题451

10.5 二叉搜索树458

10.5.1 二叉搜索树存储机制458

10.5.2 第6个包——类定义462

10.5.3 第6个包——某些简单函数的实现462

10.5.4 计算某个元素在二叉搜索树中出现的次数462

10.5.5 添加一个新元素到二叉搜索树中463

10.5.6 从二叉搜索树中移除某个元素464

10.5.7 二叉搜索树的组合操作符467

10.5.8 时间分析和迭代器469

10.5.9 自测习题469

10.6 本章小结469

10.7 自测习题答案470

10.8 编程项目473

第11章 树项目479

11.1 堆479

11.1.1 堆的存储规则479

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

11.1.3 插入新项480

11.1.4 删除项482

11.1.5 自测习题484

11.2 B树484

11.2.1 非平衡树的问题484

11.2.2 B树的规则485

11.2.3 B树的一个示例486

11.2.4 B树实现的集合ADT487

11.2.5 在B树中查找项491

11.2.6 在B树中插入项493

11.2.7 B树的松散插入操作493

11.2.8 修正子节点多余项的私有成员函数495

11.2.9 回到成员函数Insert496

11.2.10 采用自顶向下方法设计497

11.2.11 从B树中删除项498

11.2.12 B树的松散删除操作499

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

11.2.14 从B树中删除最大的项503

11.2.15 外部B树505

11.2.16 自测习题505

11.3 树、日志和时间分析506

11.3.1 二叉搜索树的时间分析506

11.3.2 堆的时间分析507

11.3.3 对数运算508

11.3.4 对数级算法509

11.3.5 自测习题510

11.4 本章小结510

11.5 自测习题答案510

11.6 编程项目513

第12章 查找515

12.1 顺序查找和二分查找515

12.1.1 顺序查找515

12.1.2 顺序查找——分析516

12.1.3 二分查找517

12.1.4 二分查找——设计518

12.1.5 二分查找——分析520

12.1.6 标准库查找函数523

12.1.7 用于有序域的函数523

12.1.8 用于无序域的函数525

12.1.9 STL查找函数526

12.1.10 自测习题526

12.2 开地址散列526

12.2.1 散列简介526

12.2.2 表类——声明529

12.2.3 表类——设计530

12.2.4 表ADT——实现533

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

12.2.6 再散列减少聚类538

12.2.7 自测习题540

12.3 链式散列540

12.3.1 链式散列540

12.3.2 自测习题542

12.4 散列的时间分析542

12.4.1 散列表的装填因子542

12.4.2 自测习题545

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

12.5.1 新表类545

12.5.2 在新表类中使用向量545

12.5.3 常量模板参数545

12.5.4 函数模板参数546

12.5.5 实现新表类546

12.5.6 自测习题547

12.6 STL中的匹配和多重匹配547

12.7 本章小结548

12.8 自测习题答案549

12.9 编程项目552

第13章 排序555

13.1 二次排序算法555

13.1.1 选择排序——规范说明555

13.1.2 选择排序——设计556

13.1.3 选择排序——实现558

13.1.4 选择排序——分析560

13.1.5 插入排序561

13.1.6 插入排序——分析564

13.1.7 自测习题566

13.2 递归排序算法567

13.2.1 使用递归的分治法567

13.2.2 合并排序569

13.2.3 合并函数571

13.2.4 动态内存在合并排序中的应用575

13.2.5 合并排序——分析575

13.2.6 文件的合并排序577

13.2.7 快速排序577

13.2.8 partition函数579

13.2.9 快速排序——分析581

13.2.10 快速排序——选择一个好的基准元素583

13.2.11 自测习题583

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

13.3.1 堆排序584

13.3.2 构建堆589

13.3.3 向下重排590

13.3.4 堆排序——分析591

13.3.5 自测习题592

13.4 使用库函数排序和随机访问迭代器592

13.4.1 原始C qusort函数592

13.4.2 STL排序函数593

13.4.3 使用迭代器编写一个排序函数593

13.5 本章小结594

13.6 自测习题答案595

13.7 编程项目597

第14章 派生类和继承601

14.1 派生类601

14.1.1 如何声明派生类603

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

14.1.3 使用派生类605

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

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

14.1.6 覆盖继承的成员函数607

14.1.7 自测习题608

14.2 仿真生态系统608

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

14.2.2 organism类609

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

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

14.2.5 animal类的其他成员函数614

14.2.6 自测习题617

14.2.7 Herbivore类618

14.2.8 池塘生活仿真程序620

14.2.9 池塘生活——实现细节623

14.2.10 使用池塘模型624

14.2.11 动态内存的使用625

14.2.12 自测习题625

14.3 虚拟成员函数和game类625

14.3.1 game类简介626

14.3.2 受保护的成员629

14.3.3 虚拟成员函数629

14.3.4 虚拟析构函数630

14.3.5 游戏类的受保护虚拟成员函数630

14.3.6 玩Connect Four游戏的派生类631

14.3.7 Connect Four游戏类的私有成员变量631

14.3.8 Connect Four的构造函数和重启函数633

14.3.9 三个处理游戏状态的Connect Four函数633

14.3.10 三个处理移动的Connect Four函数634

14.3.11 Clone函数634

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

14.3.13 使用minimax的游戏类的play算法635

14.3.14 自测习题638

14.4 本章小结638

14.5 进阶阅读639

14.6 自测习题答案639

14.7 编程项目643

第15章 图645

15.1 图的定义645

15.1.1 无向图645

15.1.2 有向图648

15.1.3 图的更多术语649

15.1.4 航线的例子650

15.1.5 自测习题650

15.2 图的实现651

15.2.1 使用邻接矩阵表示图651

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

15.2.3 使用边列表表示图652

15.2.4 使用边集表示图653

15.2.5 哪种表示方法最好653

15.2.6 编程示例:标签图类654

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

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

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

15.2.10 标签图类——函数neighbors657

15.2.11 标签图类——实现657

15.2.12 自测习题657

15.3 图的遍历662

15.3.1 深度优先搜索663

15.3.2 宽度优先搜索666

15.3.3 深度优先搜索——实现668

15.3.4 宽度优先搜索——实现669

15.3.5 自测习题669

15.4 路径算法671

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

15.4.2 具有加权边的图672

15.4.3 最短距离算法672

15.4.4 最短路径算法680

15.4.5 自测习题681

15.5 本章小结681

15.6 自测习题答案681

15.7 编程项目683

附录A ASCII字符集类687

附录B 大O表达式689

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

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

附录E 使用旧式编译器699

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

附录G 选择库函数711

附录H 标准模板类简介715

附录I useful函数的工具箱725

附录J 基本格式指南729

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

附录L 异常处理733

热门推荐