C++数据抽象和问题求解 PDF 影印第6版

  • 更新时间:
  • 1644人关注
  • 点击下载

给大家带来的一篇关于C++相关的电子书资源,介绍了关于C++、数据抽象、问题求解方面的内容,本书是由清华大学出版社出版,格式为PDF,资源大小147.1 MB,卡拉拉编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:9.3分。

书籍介绍

C++数据抽象和问题求解

内容介绍

这部經典、热销的数据结构教材内容详解了数据抽象的基本知识,注重做为面向对象方法基本基本原理的标准和执行中间的差别。书中应用的计算机专业标准和定义及其UML图有利于提高大学生的了解。

这书特性

◆详解了数据抽象,注重标准和建立中间的差别
◆普遍详细介绍了各种各样面向过程的编程技术
◆重中之重是关键的数据结构,而并不是非必要的C++語言英语的语法
◆表明了类和ADT在解决问题全过程中的功效
◆展现出ADT的关键运用,如搜索飞机航班图、事件驱动的仿真模拟和八皇后问题
◆绝大多数章节目录中的事例都应用了规范模板库(STL)
◆详细介绍了递归
◆附录中出示了基础的C++英语的语法,以协助大学生从别的语言转换为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

资源下载

相关声明:

《C++数据抽象和问题求解 》PDF 影印第6版下载资源由用户 寇艳芳 于 2019-07-08 14:18:34 分享至百度网盘。仅供想学习C++的网友交流使用,专题参考:C++,

相关资源

  • C++入门经典(第5版)

    C++入门经典(第5版)

    本书通过短小精悍的程序详细阐述了基本的C++编程概念,每章都提供了示例程序清单,并辅以示例输出和代码分析,本书针对C++初学者编写的,不要求读者有C语言方面的背景知识

    大小:50.1 MBC++入门

    立即下载
  • C++从入门到精通

    C++从入门到精通

    本书是讲解了C++编程入门经典,零基础学c++,详细讲解了C++语言的基础知识,包含16小时语音视频、881个实例、371项面试真题、616项测试,涉及范例案例、视频教程

    大小:3.19 GBC++

    立即下载
  • c++项目开发实战入门

    c++项目开发实战入门

    本书共8个项目为案例,从软件工程的角度出发,按照项目的开发顺序,系统、全面地介绍了项目开发流程,从开发背景、系统功能分析等内容,是一本让初学者通过项目实战开发学编程教程

    大小:309 MBc++开发

    立即下载
  • 数字图像处理与机器视觉:Visual C++与Matlab实现(第2版)

    数字图像处理与机器视觉:Visual C++与Matlab实现(第2版)

    本书将理论知识、科学研究和工程实践有机结合起来,内容涉及数字图像处理和识别技术的方方面面,结构紧凑,内容深入浅出,讲解图文并茂,感兴趣的可以下载学习

    大小:232 MB数字图像

    立即下载
  • C和C++程序员面试秘笈

    C和C++程序员面试秘笈

    众多语言都从C/C 有所借鉴,所以说C/C 的语言基础对从事软件开发的人员来说重要。C和C 程序员面试秘笈》是一本解析C/C 面试题的书,可以帮助求职者更好地准备面试。感兴趣的可以了解一下

    大小:64 MBC/C++面试

    立即下载
  • C++黑客编程揭秘与防范

    C++黑客编程揭秘与防范

    这本书以Win32应用层下安全开发为中心,介绍Windows系统下的安全开发,介绍了关于恶意程序、专杀工具、扫描器等工具的开发,循序渐进,欢迎下载

    大小:102.7 MBC++编程

    立即下载
  • C++语法详解

    C++语法详解

    C++语法详解适合有一定C++基础、对C++的语法有疑惑、想深入了解C++语法细节的人员阅读。《C++语法详解》同时也可以作为解决C++语法问题的参考书;对于学习过C++或已精通C++的人员,也是一本不错的资料查阅手册

    大小:117 MBC++编程

    立即下载

学习笔记

18小时57分钟前回答

PHP中关于PDO数据访问抽象层的功能操作实例

PDO:数据访问抽象层 具有三大特点: 1.可以访问其它数据库 所有数据库都可以 2.具有事务功能 3.带有预处理语句功能(防止SQL注入攻击) 实例操作代码如下: ?php//1.造PDO对象$dsn ="mysql:dbname=mydb;host=localhost";//数据库类型:dbname=数据库名称;host=链接的ip或本机$pdo =new PDO($dsn,"root","root");//$dsn,帐号,密码//2.写SQL语句$sql ="select * from info"; $sql ="insert into info values('004','王六','男','n007','1994-02-11')";//3.执行SQL语句$stm = $pdo-query($sql); //查询语句用query,返回的是结果$arr = $pdo-exec($sql);//增删改用exec,返回的是执行的行数//4.从PDOStatement对象里面读数据$arr =$stm-fetch(PDO::FETCH_NUM);//默认不选为PDO::FETCH_BOTH fetch为选择一条数据……

23小时45分钟前回答

利用es6 new.target来对模拟抽象类的方法

起源 最近在使用 Symbol 来做为唯一值,发现 Symbol 无法进行 new 操作,只能当作函数使用,只要进行了new 就会发生类型错误 new Symbol()// errorUncaught TypeError: Symbol is not a constructor at new Symbol (anonymous) at anonymous:1:1 在不考虑底层实现的情况下,在代码层面是否能够实现一个函数只可以进行调用而不可以进行 new 操作呢?思考之后如下写出: function disConstructor() { if (this !== window) { throw new TypeError(' disConstructor is not a constructor') } console.log('gogo go')}// 测试结果如下disConstructor() // gogo gonew disConstructor()// errorUncaught TypeError: disConstructor is not a constructor at new disConstructor (anonymous:3:15) at anonymous:1:1 如果使用 nodejs,window 可以切换……

4小时32分钟前回答

JDK8接口的默认与静态方法-接口与抽象类的区别详解

引入 JDK1.8后,接口允许定义默认方法与静态方法,如:Iterable类中的foreach方法。 public interface IterableT {/*** Returns an iterator over elements of type {@code T}.** @return an Iterator.*/IteratorT iterator();/*** Performs the given action for each element of the {@code Iterable}* until all elements have been processed or the action throws an* exception. Unless otherwise specified by the implementing class,* actions are performed in the order of iteration (if an iteration order* is specified). Exceptions thrown by the action are relayed to the* caller.** @implSpec* pThe default implementation behaves as if:* pre{@code* for (T t : this)* action.accept(t);* }/pre** @param action The action to be performed for each element* @throws NullPointerException if the spec……

11小时55分钟前回答

浅谈React中组件间抽象

关于今天要学习的组件间抽象其实我这小白看了几次还没弄明白,这次决定一探究竟。在组件构建中,通常有一类功能需要被不同的组件公用,此时就涉及抽象的概念,在React中我们主要了解mixin和高阶组件。 mixin mixin的特性广泛存在于各个面向对象语言中,在ruby中,include关键词就是mixin,是将一个模块混入到另外一个模块中,或者是类中。 封装mixin方法 const mixin = function(obj, mixins) { const newObj = obj newObj.prototype = Object.create(obj.prototype) for(let props in mixins) { newObj.prototype[props] = mixins[props] } return newObj}const BigMixin = { fly: () = { console.log('i can fly') }}const Big = function() { console.log('new big')}const FlyBig = mixin(Big , BigMixin……