C++类和数据结构(国外计算机科学经典教材)

分類: 图书,计算机/网络,程序设计,C C++ C# VC VC++,
作者: (美)查尔兹(Childs,J.S)著;张杰良译
出 版 社: 清华大学出版社
出版时间: 2009-1-1字数: 550000版次: 1页数: 401印刷时间: 2009/01/01开本: 16开印次: 1纸张: 胶版纸I S B N : 9787302191797包装: 平装内容简介
这是一本适合于学生的C++数据结构指南,它基于现代软件发展的现实和职业程序员的需求。本书首先从类的全面介绍入手,提供学生成功使用数据结构所需的基础知识。接下来介绍了创建数据结构的方法,包括链表和可扩展/收缩的动态数组。解释了时间复杂度对执行速度的影响方式,帮助程序员理解关键性能之间的权衡考虑。然后以这些为基础,从散列表到二叉搜索树,详细介绍了每一种常见的数据结构。本书还详细设计了各种概念性的解释,以帮助程序员使用任何现代程序语言。
本书可作为计算机类专业或信息类相关专业的本科或专科教材,也可供从事计算机工程与应用工作的科技工作者参考。
本书特色:
为每个关键的数据结构概念提供了清晰易懂的解释
书中示例的设计综合考虑速度、内存使用、可靠性和程序员方便性等诸方面的问题
每章后面还提供相关的练习,解决程序员实际编程过程中所面临的富有针对性的问题
所有的例子都使用Visual C++2005编译和测试,并且可以在Microsoft免费的Visual Studio 2005
Express Edition上运行。
作者简介
Jeffrey S.Childs先生拥有美国扬斯敦州立大学计算机科学专业的学士学位以及肯特州立大学的计算机科学硕士和博士学位。他致力于图像高斯分解的研究,撰写并发表了多篇该领域的论文。他开发了Quickstep算法,该算法在时间复杂度上大大优于现有的高斯分解算法。在过去的9年中,他一直在讲授数据结构课程。此外,他还从事数据结构的研究,在基于客户教学法设计、内存管理以及特定数据结构设计等领域都有所突破。目前,Jeffrey S.Childs博士是美国宾州克莱瑞恩大学的终身教授。
目录
第1章 结构和类
1.1 结构
1.2 类的基本概念
1.3 类的实现
1.4 类的测试
1.5 将函数定义放在类定义中
1.6 类的注释
1.7 结构和类之间的区别
1.8 小结
1.9 练习
第2章 重载运算符、类模板和抽象
2.1 重载运算符
2.2 在Checkbook类中使用Check结构
2.3 类模板
2.4 类和抽象
2.5 小结
2.6 练习
第3章 类的更多内容
3.1 const限定符
3.2 构造函数
3.3 类的修改
3.4 修改Checkbook类保存支票历史记录
3.5 小结
3.6 练习
第4章 指针和动态数组
4.1 指针
4.2 〔〕运算符
4.3 动态分配内存
4.4 动态数组
4.5 delete操作符
4.6 对象指针
4.7 堆内存耗尽
4.8 可调数组
4.9 小结
4.10 练习
第5章 Array类
5.1 Array类模板
5.2 使用ArraY类
5.3 析构函数
5.4 复制构造函数
5.5 重载赋值运算符函数
5.6 示例
5.7 Array类的优缺点
5.8 标准模板库
5.9 小结
5.10 练习
第6章 面向对象编程简介
6.1 组合
6.2 继承
6.3 多态
6.4 小结
6.5 练习
第7章 生成数据结构的方法
7.1 在数据结构中使用数组
7.2 链式结构简介
7.3 链表编码
7.3.1 链表代码基础
7.3.2 在链表中搜索一个肯定存在的值
7.3.3 在链表中搜索可能不存在的值
7.3.4 在链表的表头插入一个结点
7.3.5 在链表中间插入一个结点
7.3.6 从链表中删除一个包含链表中某个值的结点
7.3.7 使用header结点简化代码
7.3.8 删除找到包含某值的结点
7.4 数组和链表的对比
7.4.1 数组和链表在速度上的比较
7.4.2 数组和链表在内存浪费上的比较
7.4.3 浪费内存分析
7.5 小结
7.6 练习
第8章 栈和队列
8.1 栈ADT
8.2 栈的数组实现
8.3 栈的链表实现
8.4 队列ADT
8.5 队列的链表实现
8.6 队列的其他链表实现
8.7 队列的数组实现
8.8 小结
8.9 练习
第9章 时间复杂度简介
9.1 时间复杂度基础
9.2 常量阶时间复杂度
9.3 大O表示法
9.4 对数阶时间复杂度
9.5 折半搜索算法
9.6 计算机速度:它来源于什么地方
9.7 数据结构函数的时间复杂度
9.8 数组扩展和收缩的平摊分析
9.9 小结
9.10 练习
第10章 链表作为数据结构
10.1 列表ADT
10.2 在信息记录中使用关键码值
10.3 链表实现
10.3.1 链表说明文件
10.3.2 链表实现文件
10.4 其他实现
10.5 小结
10.6 练习
第11章 散列表
11.1 散列表ADT
11.2 散列函数和散列表设计
11.3 散列表的实现问题
11.4 函数指针
11.5 散列表实现
11.6 使用散列表实现
11.7 双向链表的散列表实现
11.7.1 实现问题
11.7.2 DoublyLinkedList类的说明文件
11.7.3 DoublyLinkedList类的实现文件
11.8 小结
11.9 练习
第12章 优先级队列、树和堆
12.1 优先级队列ADT
12.2 优先级队列设计
12.3 树
12.4 堆
12.5 使用单赋值交换
12.6 优先级队列的堆实现(基于数组)
12.7 链(内嵌)堆设计
12.8 优先级队列的链(内嵌)堆实现
12.9 小结
12.10 练习
第13章 递归
13.1 递归阶乘函数
13.2 递归函数编写原则
13.3 在链式结构上使用递归
13.4 递归函数的时间复杂度
13.5 小结
13.6 练习
第14章 排序算法简介
14.1 堆排序
14.2 插入排序
14.3 快速排序
14.4 统计排序
14.5 链表排序
14.6 小结
14.7 练习
第15章 其他数据结构
15.1 二叉搜索树
15.2 BST和其他数据结构的对比
15.3 图
15.4 邻接矩阵和邻接表之间的对比
15.5 小结
15.6 练习
附录A 如何编译及使用多文件程序
A.1 Microsoft Visual Studio 2005 C++编译器
A.2 编译和运行使用类的代码(不是类模板)
A.3 编译和运行使用类模板的代码
A.4 使用Microsoft Visual Studio 2005编写代码
A.5 在Microsoft Visual Studio 2005中打开一个已创建的项目
A.6 何种情况下事情会变乱
A.7 UNIX编译器
书摘插图
第1章 结构和类
看看您的周围,您会发现什么呢?数据无处不在。数据存在于您的电话本中,存在于足球比赛的记分和统计表中,存在于团体的人员列表中。存在于脆玉米片中(脆玉米片中含有23%的糖、5%的玉米等)。当我们为现实世界,而不是为了完成作业而编写实际程序时,我们的任务通常要处理(或者至少需要使用)大量的数据。
数据结构(data structure)指的是存储数据的结构。在处理数据方面,数据结构拥有重要的用途。有些数据结构用作处理数据的算法的必要组成部分,有些数据结构用来对数据进行更加高效的处理。
我们可以将数据结构看作工具箱中的一套工具。当编写特定程序时,我们选择合适的数据结构,就像我们要修理房子时从工具箱中选择合适的工具一样。当您希望在板子上钉钉子时,如果选择了合适的工具,就会发现工作非常方便。例如,选择锤子来钉钉子,而不是选择板手。对于数据结构也是如此。从数据结构工具箱中选择一种合适的数据结构可以帮助解决复杂的问题,或者提高算法的速度。选择这一种数据结构,而不是另一种数据结构,可以节省程序使用的内存(RAM)量。在一些情况下,如果将数据结构设计为专用的工具,则会对您的程序最有利。因此,通常的数据结构课程或者教材,一般都是向大家介绍一些最常见的数据结构,以及设计数据结构所需的知识。
和计算机程序一样,数据结构也必须用代码编写。类(class)指的是一段程序代码,它和一些其他代码一起构成大多数对象(我们称之为数据结构)。到目前为止,大家可能已经用函数、while循环、for循环或者if语句等编写过c++程序,但是有可能从来没有编写过类,因此它对您来说还完全陌生。但是在当今这个时代能够编写类至关重要。
……