出版时间:2009-1 出版社:清华大学出版社 作者:查尔兹 页数:401 译者:张杰良
Tag标签:无
前言
数据结构是计算机专业的一门重要的基础课,在计算机科学各领域尤其是在软件设计和开发中发挥着举足轻重的作用。几乎所有的计算机软件系统,例如,操作系统、编辑工具和编译器等都要使用不同的数据结构。因此,数据结构是计算机专业的核心课程,是许多其他后续课程的重要基础。目前,国内外有很多介绍数据结构方面的书籍,这些书籍都各具特色。但是大多数书籍都只注重于技术细节,缺乏详细的解释说明,没有数据结构基础知识的读者难以掌握理解。考虑到上述事实,本书作者从自己教学的实际需求出发,根据自己对数据结构的理解,结合自己对数据结构的研究,考虑学生的学习需求,编写了本书。本书由易到难,不仅详细介绍了各种常见的数据结构,还提供了学习数据结构的基础知识。读者可以先阅读基础知识,再深入学习数据结构,通过这种安排方式,方便读者的学习,加强概念的理解。本书采用当前流行的面向对象的C++语言来描述数据结构和算法,因为c++语言是程序员使用最广泛的语言。但是,本书还考虑到目前编程语言的多样性,在详细阐述数据结构概念时尽量避免使用与语言相关的术语解释,强调对概念的透彻理解,注重能力的培养,使读者能够使用其他编程语言编写出自己所需的数据结构。通过本书的学习,读者不仅可以了解数据结构的基本概念和算法,还可以了解数据结构的应用场合;不仅可以使用数据结构,还可以根据需求设计自己的数据结构;不仅可以选择高效的算法,还可以了解这样做的原因。确切地说,本书内容全面丰富,语言精练简洁,示例和练习的实践性、针对性强,是一本优秀的数据结构教材。
内容概要
这是一本适合于学生的C++数据结构指南,它基于现代软件发展的现实和职业程序员的需求。本书首先从类的全面介绍入手,提供学生成功使用数据结构所需的基础知识。接下来介绍了创建数据结构的方法,包括链表和可扩展/收缩的动态数组。解释了时间复杂度对执行速度的影响方式,帮助程序员理解关键性能之间的权衡考虑。然后以这些为基础,从散列表到二叉搜索树,详细介绍了每一种常见的数据结构。本书还详细设计了各种概念性的解释,以帮助程序员使用任何现代程序语言。 本书可作为计算机类专业或信息类相关专业的本科或专科教材,也可供从事计算机工程与应用工作的科技工作者参考。 本书特色: 为每个关键的数据结构概念提供了清晰易懂的解释 书中示例的设计综合考虑速度、内存使用、可靠性和程序员方便性等诸方面的问题 每章后面还提供相关的练习,解决程序员实际编程过程中所面临的富有针对性的问题 所有的例子都使用Visual C++2005编译和测试,并且可以在Microsoft免费的Visual Studio 2005 Express Edition上运行。
作者简介
Jeffrey S.Childs先生拥有美国扬斯敦州立大学计算机科学专业的学士学位以及肯特州立大学的计算机科学硕士和博士学位。他致力于图像高斯分解的研究,撰写并发表了多篇该领域的论文。他开发了Quickstep算法,该算法在时间复杂度上大大优于现有的高斯分解算法。在过去的9年中,
书籍目录
第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编译器
章节摘录
插图:第2-4行处理Mercedes结点是链表第一个结点的特殊情况。如果Mercedes结点是链表的第一个结点,那么由于第1行代码,ptr早已指向它。我们只需在第3行中将start指针指向链表中的下一个结点即可,因为这个结点将成为链表的新表头。然后,在第4行中,我们将第一个结点占用的内存空间释放。注意这种特殊情况对于链表中只有一个结点的情况也适用。在这种情况下,指针start将在第3行中被赋予NULL。在第7行中,我们检查下一个结点是否拥有Mercedes,但是并没有将指针ptr指向这个结点。
图书封面
图书标签Tags
无
评论、评分、阅读与下载