数据结构——C++版
|
|
| 新书城图书编号:1659 |
| 图书ISBN:7302074917 |
| 出版时间:2004-1-1 |
| 出版社:清华大学出版社 |
| 作者:(美)马立克 著,王海涛,丁炎炎 译 |
|
市场价格:¥92 |
|
普通会员:¥73.6
|
80折 |
|
VIP会员:¥69
|
75折 |
|
|
|
|
|
|
|
【图书简介】
|
本书是一本针对CS2课程 基础性完全读本。它专门为学生编写和设计,通过大量简洁而有条理的说明和示例,运用C++成功地描述了算法。这本书涉及了所有的CS2主题,例如结构化模板库、二叉搜索树、图算法、以及搜索和排序。 D.S.Malik是Creighton大学的数学和计算机科学教授。他于1985年在Creighton大学获得了Ph.D。自那以后,他就一直在Creighton大学讲授计算机编程方面的课程。他已经在抽象代数学、模糊自控理论和语言、模糊逻辑及其应用和信息科学等领域发表了45篇论文并出版了6本著作。
|
|
|
|
【图书目录】
|
第1章 软件工程基本原理和C++类 1 1.1 软件的生命周期 1 1.2 软件开发阶段 2 1.2.1 分析阶段 2 1.2.2 设计阶段 2 1.2.3 实现阶段 3 1.2.4 测试和调试 5 1.3 算法分析:大O表示法 6 1.4 类 12 1.4.1 统一建模语言图 15 1.4.2 变量(对象)的声明 15 1.4.3 访问类的成员 16 1.4.4 类的内置运算 17 1.4.5 赋值运算符和类 17 1.4.6 类的作用域 17 1.4.7 函数和类 18 1.4.8 引用参数和类对象(变量) 18 1.4.9 成员函数的实现 19 1.4.10 构造函数 23 1.4.11 调用构造函数 26 1.4.12 构造函数和默认参数 26 1.4.13 析构函数 27 1.4.14 结构 27 1.5 数据抽象、类和抽象数据类型 27 1.6 编程示例:糖果机 36 1.6.1 问题分析和算法设计 36 1.6.2 收银机 36 1.6.3 控制装置 38 1.6.4 主程序 40 1.7 标识类、对象和操作 45 1.8 快速回顾 45 1.9 练习题 47 1.10 编程练习 51 第2章 面向对象的设计方法和C++ 54 2.1 继承 54 2.1.1 重新定义基类的成员函数 57 2.1.2 派生类与基类的构造函数 58 2.1.3 派生类的头文件 64 2.1.4 头文件的多重包含 64 2.1.5 类的保护成员 66 2.1.6 三种继承方式:公有继承,保护继承或私有继承 66 2.2 聚合 67 2.3 多态:运算符和函数重载 71 2.4 运算符重载 71 2.4.1 为什么要重载运算符 71 2.4.2 运算符重载 72 2.4.3 运算符函数的语法 73 2.4.4 重载运算符的限制 73 2.4.5 this指针 73 2.4.6 类的友元函数 77 2.4.7 定义友元函数 77 2.4.8 运算符函数的两种形式:成员函数和非成员函数 80 2.5 重载二元运算符 81 2.5.1 重载二元运算符(算术运算符和关系运算符)为成员函数 81 2.5.2 重载二元运算符(算术运算符和关系运算符)为非成员函数 83 2.5.3 重载输出(<<)和输入(>>)运算符 84 2.5.4 重载输出运算符(<<) 84 2.5.5 重载输入运算符(>>) 85 2.5.6 重载运算符形式的选择:成员函数和非成员函数 87 2.6 编程示例:复数 87 2.7 函数重载 92 2.8 模板 92 2.8.1 函数模板 93 2.8.2 类模板 95 2.8.3 头文件和类模板的实现文件 97 2.9 快速回顾 97 2.10 练习题 99 2.11 编程练习 109 第3章 指针和基于数组的表 113 3.1 指针数据类型和指针变量 113 3.1.1 声明指针变量 113 3.1.2 取地址运算符(&) 114 3.1.3 取值运算符(*) 115 3.1.4 类、结构和指针变量 120 3.1.5 初始化指针变量 123 3.1.6 动态变量 123 3.1.7 指针变量的运算 125 3.2 动态数组 126 3.2.1 函数和指针 128 3.2.2 指针和函数返回值 128 3.3 浅复制、深复制与指针 129 3.4 类和指针:一些特例 131 3.4.1 析构函数 132 3.4.2 赋值运算符 133 3.4.3 重载赋值运算符 135 3.4.4 复制构造函数 138 3.5 重载数组索引(下标)运算符([]) 144 3.6 编程示例:newString 145 3.7 基于数组的表 151 3.7.1 复制构造函数 160 3.7.2 重载赋值运算符 161 3.7.3 搜索 161 3.7.4 插入 163 3.7.5 删除 163 3.7.6 各种表操作的时间复杂度 164 3.8 编程示例:多项式的运算 168 3.9 快速回顾 175 3.10 练习题 177 3.11 编程练习 182 第4章 标准模板类库 185 4.1 STL的组成部分 185 4.1.1 容器类型 186 4.1.2 顺序容器 186 4.2 顺序容器:向量容器 186 4.2.1 声明vector对象 187 4.2.2 为向量容器声明一个迭代器 189 4.2.3 容器以及begin和end函数 190 4.2.4 对所有容器通用的成员函数 193 4.2.5 顺序容器公共的成员函数 194 4.2.6 copy算法 194 4.2.7 ostream迭代器和copy函数 196 4.3 顺序容器:双端队列 198 4.4 迭代器 201 4.4.1 迭代器的类型 202 4.4.2 输入迭代器 202 4.4.3 输出迭代器 202 4.4.4 前向迭代器 203 4.4.5 双向迭代器 203 4.4.6 随机访问迭代器 203 4.4.7 流迭代器 205 4.5 编程示例:成绩报告单 206 4.5.1 问题分析与算法设计 208 4.5.2 主程序 219 4.5.3 程序清单 221 4.6 快速回顾 226 4.7 练习题 227 4.8 编程练习 231 第5章 链表 234 5.1 链表 234 5.2 链表的属性 236 5.3 项的插入和删除 239 5.3.1 插入 239 5.3.2 删除 241 5.4 构建链表 243 5.4.1 正向构建链表 243 5.4.2 反向构建链表 247 5.5 ADT链表 248 5.5.1 默认构造函数 251 5.5.2 销毁表 252 5.5.3 初始化表 252 5.5.4 重载输出运算符 253 5.5.5 表的长度 253 5.5.6 检索第一个节点的数据 253 5.5.7 检索最后一个节点的数据 254 5.5.8 搜索表 254 5.5.9 在表头插入节点 255 5.5.10 在表尾插入节点 256 5.5.11 删除节点 256 5.5.12 复制表 261 5.5.13 析构函数 262 5.5.14 复制构造函数 262 5.5.15 重载赋值运算符 263 5.6 有序链表 264 5.6.1 搜索表 265 5.6.2 插入节点 266 5.6.3 删除节点 270 5.6.4 有序链表的头文件 271 5.7 双向链表 273 5.7.1 默认构造函数 276 5.7.2 isEmptyList 276 5.7.3 销毁表 277 5.7.4 初始化表 277 5.7.5 表的长度 277 5.7.6 重载输出运算符 278 5.7.7 反向打印表 278 5.7.8 搜索表 279 5.7.9 第一个和最后一个元素 279 5.7.10 插入节点 280 5.7.11 删除节点 282 5.8 STL顺序容器:list 284 5.9 带有头节点和尾节点的链表 289 5.10 循环链表 290 5.11 编程示例:Video Store 291 5.12 快速回顾 309 5.13 练习题 310 5.14 编程练习 315 第6章 递归 319 6.1 递归的定义 319 6.1.1 直接递归和间接递归 321 6.1.2 无穷递归 321 6.2 递归法解决问题 322 6.3 递归还是迭代 337 6.4 递归和回溯:n-皇后问题 338 6.4.1 回溯 338 6.4.2 回溯和4皇后问题 340 6.4.3 8皇后问题 341 6.5 快速回顾 345 6.6 练习题 346 6.7 编程练习 348 第7章 堆栈 353 7.1 堆栈 353 7.2 使用数组实现堆栈 355 7.2.1 初始化堆栈 358 7.2.2 销毁堆栈 359 7.2.3 空堆栈 359 7.2.4 满堆栈 359 7.2.5 入栈 359 7.2.6 返回栈顶元素 361 7.2.7 出栈 361 7.2.8 复制堆栈 362 7.2.9 构造函数和析构函数 363 7.2.10 复制构造函数 364 7.2.11 重载赋值运算符(=) 364 7.2.12 堆栈的头文件 365 7.3 编程示例:求最高GPA 366 7.4 堆栈的链表实现 370 7.4.1 默认构造函数 372 7.4.2 销毁堆栈 373 7.4.3 初始化堆栈 373 7.4.4 入栈 374 7.4.5 返回栈顶元素 377 7.4.6 出栈 377 7.4.7 由类linkedListType派生而来的堆栈 379 7.5 堆栈应用:后缀表达式计算器 381 7.5.1 主算法 385 7.5.2 完整的程序清单 387 7.6 消除递归:反向打印一个链表的非递归算法 391 7.7 STL堆栈类(堆栈容器适配器) 396 7.8 快速回顾 398 7.9 练习题 398 7.10 编程练习 402 第8章 队列 404 8.1 队列 404 8.1.1 队列操作 404 8.1.2 队列的数组实现 405 8.2 队列的链式实现 416 8.3 从类linkedListType派生而来的队列 420 8.4 STL类queue(队列容器适配器) 423 8.5 优先级队列 425 8.6 队列的应用:模拟 426 8.6.1 设计队列系统 427 8.6.2 客户 427 8.6.3 服务器 430 8.6.4 服务器表 433 8.6.5 等待客户的队列 438 8.6.6 主程序 440 8.7 快速回顾 447 8.8 练习题 447 8. 9 编程练习 451 第9章 搜索算法 453 9.1 搜索算法 453 9.1.1 顺序搜索 456 9.1.2 顺序搜索算法分析 457 9.1.3 有序表 458 9.1.4 折半搜索 459 9.1.5 折半搜索算法的性能 462 9.1.6 将数据项插入到一个有序表 463 9.2 基于比较的搜索算法的下限 465 9.3 散列算法 466 9.3.1 散列函数:示例 467 9.3.2 冲突解决 467 9.3.3 冲突解决:开型寻址法 467 9.3.4 二次探测 469 9.3.5 删除:开型寻址法 472 9.3.6 散列法:使用二次探测来实现 473 9.3.7 冲突解决:链地址法(开散列方法) 476 9.3.8 散列法性能分析 477 9.4 快速回顾 478 9.5 练习题 480 9.6 编程练习 481 第10章 排序算法 484 10.1 排序算法 484 10.2 选择排序: 基于数组的表 484 10.3 插入排序: 基于数组的表 490 10.4 插入排序: 基于链表的表 495 10.5 基于比较的排序算法的下限 499 10.6 快速排序:基于数组的表 500 10.7 归并排序: 基于链表的表 505 10.7.1 划分 507 10.7.2 归并 509 10.7.3 分析:归并排序 512 10.8 堆排序: 基于数组的表 512 10.8.1 构建堆 513 10.8.2 分析:堆排序 520 10.9 再论优先级队列 520 10.9.1 在优先级队列中插入一个元素 521 10.9.2 从优先级队列删除一个元素 521 10.10 编程示例:选举结果 521 10.10.1 问题分析和算法设计 522 10.10.2 主程序 528 10.10.3 对姓名排序 530 10.10.4 处理投票数据 532 10.10.5 计算选票数的总和 534 10.10.6 打印标题和结果 534 10.11 快速回顾 538 10.12 练习题 539 10.13 编程练习 540 第11章 二叉树 543 11.1 二叉树 543 11.2 二叉树的遍历 549 11.2.1 中序遍历 549 11.2.2 前序遍历 549 11.2.3 后序遍历 549 11.2.4 二叉树的实现 552 11.3 二叉搜索树 560 11.3.1 search函数 562 11.3.2 Insert函数 564 11.3.3 Delete函数 565 11.4 二叉搜索树分析 572 11.5 二叉树的非递归遍历算法 573 11.5.1 非递归中序遍历 573 11.5.2 非递归前序遍历 574 11.5.3 非递归后序遍历 576 11.6 二叉树遍历和作为参数的函数 577 11.7 AVL(平衡)树 580 11.7.1 AVL树的插入操作 582 11.7.2 AVL树的旋转 587 11.7.3 AVL树的删除操作 598 11.7.4 AVL树的性能分析 599 11.8 编程示例:Video Store 600 11.9 快速回顾 608 11.10 练习题 609 11.11 编程练习 612 第12章 图 614 12.1 初识图 614 12.2 图的定义和符号 615 12.3 图的表示方法 617 12.3.1 邻接矩阵 617 12.3.2 邻接表 618 12.4 图的操作 619 12.5 回顾模板 620 12.6 图的ADT定义 620 12.7 图的遍历 624 12.7.1 深度优先遍历 624 12.7.2 广度优先遍历 626 12.8 最短路径算法 628 12.9 最小生成树 634 12.10 拓扑排序 641 12.11 快速回顾 647 12.12 练习题 648 12.13 编程练习 650 第13章 标准模板库(STL)Ⅱ 652 13.1 pair类 652 13.1.1 比较pair类型的对象 654 13.1.2 pair类型和make_pair函数 654 13.2 关联容器 656 13.2.1 关联容器:集合和多重集合 657 13.2.2 关联容器:映射和多重映射 661 13.3 容器、相关头文件和迭代器支持 666 13.4 算法 666 13.5 STL算法分类 667 13.5.1 非修改算法 667 13.5.2 修改算法 667 13.5.3 数值算法 668 13.5.4 堆算法 668 13.5.5 函数对象 669 13.5.6 谓词 674 13.5.7 插入迭代器 674 13.6 STL算法 676 13.6.1 fill 和fill_n函数 676 13.6.2 generate 和generate_n函数 678 13.6.3 find、find_if、find_end和find_first_of函数 679 13.6.4 remove、remove_if、remove_copy和remove_copy_if函数 681 13.6.5 replace、replace_if、replace_copy和replace_copy_if函数 685 13.6.6 swap、iter_swap和swap_ranges函数 687 13.6.7 search、search_n、sort和binary_search函数 690 13.6.8 adjacent_find、merge和inplace_merge函数 694 13.6.9 reverse、reverse_copy、rotate、rotate_copy函数 696 13.6.10 count、count_if、max、max_element、min、min_element和random_shuffle函数 699 13.6.11 for_each和transform函数 702 13.6.12 includes、set_intersection、set_union、set_difference和set_symmetric_ difference 函数 705 13.6.13 accumulate、adjacent_difference、inner_product和partial_sum函数 713 13.7 快速回顾 718 13.8 练习题 720 13.9 编程练习 722 附录A 保留字 724 附录B 运算符优先级 725 附录C 字符集 726 附录D 运算符重载 728 附录E 头文件 729 E.1 头文件cassert 729 E.2 头文件cctype 729 E.3 头文件cmath 730 E.4 头文件cstddef 731 E.5 头文件cstring 731 E.6 头文件string 732 附录F 其他C++主题 734 F.1 继承、指针和虚函数 734 F.2 类和虚析构函数 740 F.3 取地址运算符和类 740 附录G 针对JAVA程序员的C++介绍 744 G.1 数据类型 744 G.2 名称常量、变量以及赋值语句 745 G.3 预处理指令 746 G.4 C++程序 746 G.5 输入和输出 747 G.6 控制结构 756 G.7 命名空间 757 G.8 函数及其参数 761 G.9 数组 765 附录H 参考文献 768 附录I 精选习题答案 769
|
|
|
|