标签分类
当前位置:首页 > 程序设计电子书 > C++电子书网盘下载
C++数据抽象和问题求解 C++数据抽象和问题求解
danewang

danewang 提供上传

资源
11
粉丝
9
喜欢
2
评论
13

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

    C++电子书
    • 发布时间:

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

  • C++数据抽象和问题求解 PDF 下载
  • 下载地址:https://pan.baidu.com/s/1dNDMhYBAmPSlL40FCZlByA
  • 分享码:akc4
  • 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++相关电子书
    学习笔记
    网友NO.170037

    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为选择一条数据$arr = $stm-fetchAll(PDO::FETCH_BOTH);//fetchAll为全选//事务类型:即要不全部都通过,要不全部失败,可以参考淘宝购物,必须同时满足扣款,减去库存和添加订单三项条件,缺一不可//beginTransation 启动事务//commit 提交事务//rollback 回滚:返回到启动事务之前//1.造PDO对象$dsn ="mysql:dbname=mydb;host=localhost";$pdo =new PDO($dsn,"root","root");//2.将PDO的错误类型设置为异常模式$pdo-setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);try //尝试运行,包含从开启事务到提交事务{ //开启事务 $pdo-beginTransaction(); $sql1 = "insert into info values('004','进口','男','n008','1994-05-11')"; $sql2……

    网友NO.353344

    利用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 可以切换为 global, 代码运行结果不变,因为对于个人而言没有适用场景。于是就没有继续研究下去,可是最近在从新翻阅 es6 时候发现 new.target这个属性。 new.target 属性 介绍(引用 mdn 文档) new.target属性允许你检测函数或构造方法是否是通过new运算符被调用的。 在通过new运算符被初始化的函数或构造方法中,new.target返回一个指向构造方法或函数的引用。在普通的函数调用中,new.target 的值是undefined。 这样的话 我们的代码就可以这样改为 function disConstructor() { // 普通的函数调用中,new.target 的值是undefined。 if (new.target) { throw new TypeError(' ……

    网友NO.138726

    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 specified action is null* @since 1.8*/default void forEach(Consumer? super T action) {Objects.requireNonNull(action);for (T t : this) {action.accept(t);}}...} 可以发现,接口越来越和抽象类相似了。 设计初衷 以往,如果想在接口中新增方法比如foreach,他的子类(比如集合类)必须全部实现这个方法,这有点不现实,增加了default方法之后,就解决了这一问题,以前接口是对行为的抽象,纯设计模型,现在接口也承担了代码重构的一些责任,有利有弊吧 . 方法冲突 一个类可以实现多个接口,也就是说有可能会发生默认方法冲突,有以下几种情况: 1、如果接口继承自……

    网友NO.883929

    浅谈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)const flyBig = new FlyBig()FlyBig.fly() //'i can fly' 对于广义的mixin方法,就是用赋值的方式将mixin对象里的方法都挂载到原对象上去,来实现对对象的混入。 React中的mixin React在使用createClass构建组件时提供了mixin属性,如官方的PureRenderMixin: import React from 'react'import PureRenderMixin from 'react-addons-pure-render-mixin'React.createClass({ mixins: [PureRenderMixin] render() { return divfoo/foo }}) 在createClass对象参数中传入数组mixins,里面封装了我们所需要的模块,mixins数组也可以增加多个mixin,其每一个mixin方法之间的有重合,对于普通方法和生命周期方法是有所区分的……

    Copyright 2018-2019 xz577.com 码农之家

    版权责任说明