数据结构与问题求解:Java语言描述(第3版)(用Java语言讲述数据结构的经典教材)
基本信息
编辑推荐
Mark Allen Weiss教授撰写的数据结构与算法分析方面的著作曾被评为20世纪最佳的30部计算机著作之一,已经成为公认的经典之作,被全球数百所大学采用为教材,广受好评。
本书反映了Weiss教授在数据结构和算法分析教学实践方面的最新成果。书中从实践需要出发,采用主流的面向对象编程语言Java,在讲述了基本数据结构和算法之后,先通过几个贴近实际的实例讲授学生如何使用现成的数据结构来解决问题,有利于提高学生抽象思维能力,然后再透彻讲解Java集合类对各种数据结构的实现。既降低了学习难度,又增加了趣味性。
与此同时,本书仍然继承了Weiss著作数学严密、覆盖全面。选材精当、结构安排灵活以及习题丰富的优秀传统,适合读者自学和各种方式的课堂教学。
内容简介回到顶部↑
本书从讲解什么是数据结构开始,延伸至高级数据结构和算法分析,强调数据结构和问题求解技术。本书的目的是从抽象思维和问题求解的观点提供对数据结构的实用介绍,试图包含有关数据结构、算法分析及其java实现的所有重要的细节。作者采用了独特的方法将数据结构分成说明和实现两部分,并充分利用了已有的数据结构库(java集合类api)。本书分为四个部分:第一部分讨论适合大多数应用的集合类api的一个子集,并覆盖基本的算法分析技术、递归和排序算法;第二部分包含了一组集合类api的应用实例;第三部分讨论数据结构的实现;第四部分描述了高级的数据结构,如伸展树、偶堆和不相交集数据结构。.
本书适合作为本科生数据结构课程或研究生算法分析课程的教材。教师可以灵活地选择本书的内容,选择最适合对应课程的内容授课。
mark allen weiss教授撰写的数据结构与算法分析方面的著作曾被评为20世纪最佳的30部计算机著作之一,已经成为公认的经典之作,被全球数百所大学采用为教材,广受好评。..
本书反映了weiss教授在数据结构和算法分析教学实践方面的最新成果。书中从实践需要出发,采用主流的面向对象编程语言java,在讲述了基本数据结构和算法之后,先通过几个贴近实际的实例讲授学生如何使用现成的数据结构来解决问题,有利于提高学生抽象思维能力,然后再透彻讲解java集合类对各种数据结构的实现。既降低了学习难度,又增加了趣味性。
与此同时,本书仍然继承了weiss著作数学严密、覆盖全面。选材精当、结构安排灵活以及习题丰富的优秀传统,适合读者自学和各种方式的课堂教学。...
本书适合作为本科生数据结构课程或研究生算法分析课程的教材。教师可以灵活地选择本书的内容,选择最适合对应课程的内容授课。
mark allen weiss教授撰写的数据结构与算法分析方面的著作曾被评为20世纪最佳的30部计算机著作之一,已经成为公认的经典之作,被全球数百所大学采用为教材,广受好评。..
本书反映了weiss教授在数据结构和算法分析教学实践方面的最新成果。书中从实践需要出发,采用主流的面向对象编程语言java,在讲述了基本数据结构和算法之后,先通过几个贴近实际的实例讲授学生如何使用现成的数据结构来解决问题,有利于提高学生抽象思维能力,然后再透彻讲解java集合类对各种数据结构的实现。既降低了学习难度,又增加了趣味性。
与此同时,本书仍然继承了weiss著作数学严密、覆盖全面。选材精当、结构安排灵活以及习题丰富的优秀传统,适合读者自学和各种方式的课堂教学。...
作译者回到顶部↑
本书提供作译者介绍
Mark Allen Weiss,1987年在普林斯顿大学获得计算机科学博士学位,师从Robert Sedgewick,现任美国佛罗里达国际大学计算与信息科学学院教授。他曾经担任全美AP(Advanced Placement)考试计算机学科委员会的主席(2000-2004)。他的主要研究方向是数据结构、算法和教育学。...
.. << 查看详细
.. << 查看详细
目录回到顶部↑
第一部分 算法和构件块
第1章 算法分析.
1.1 什么是算法分析
1.2 算法运行时间的实例
1.3 连续子序列最大和的问题
1.4 一般的大o规则
1.5 对数
1.6 静态查找问题
1.7 算法分析的检查
1.8 大o分析的局限性
第2章 集合类api
2.1 引言
2.2 迭代器模式
2.3 集合类api:容器和迭代器
2.4 泛型算法
2.5 list接口
2.6 栈和队列
2.7 集合
2.8 映射
2.9 优先级队列
第1章 算法分析.
1.1 什么是算法分析
1.2 算法运行时间的实例
1.3 连续子序列最大和的问题
1.4 一般的大o规则
1.5 对数
1.6 静态查找问题
1.7 算法分析的检查
1.8 大o分析的局限性
第2章 集合类api
2.1 引言
2.2 迭代器模式
2.3 集合类api:容器和迭代器
2.4 泛型算法
2.5 list接口
2.6 栈和队列
2.7 集合
2.8 映射
2.9 优先级队列
译者序回到顶部↑
用面向对象技术讲授数据结构是目前常见的教授方法。这种方法与传统方法相比难度更大。学生不仅需要理解这些数据结构的工作过程,还需要理解为什么以及如何去封装这些数据结构。对学生来说,后者更困难。因为大多数学生只学过程序设计,缺乏开发大程序的经历,很难体会面向对象的精髓。他们能理解数据结构的工作过程,但很难理解封装。针对这个问题,本书先介绍数据结构的接口,让学生了解如何使用已有的数据结构,使学生有个感性认识,然后再介绍如何实现一个数据结构。这种让学生先当用户,体会用户的需求,然后再当设计者的方法使学生比较容易理解。.
从内容上来看,本书内容详实,既包含了经典的数据结构的内容也包含了一些高级的、分析较为复杂的数据结构的内容。特别是高级数据结构部分是数据结构领域中的研究进展的一个较好的总结。本书内容的另一个特点就是为算法提供了较为严密的运行时间的分析,这些分析需要较扎实的数学基础,但分析并不影响算法的实现。教师可以根据教授的对象选择不同的内容。同时本书还结合了程序设计语言的发展,在数据结构的实现中应用了Java 5.0中的许多新增特性,包括泛型程序设计和泛型集合类的设计。..
作为一本教材,习题的设计是一个重要的环节。作者对此做了大量的工作,设计了大量的、适合不同层次学生需要的习题。本书的习题有四种形式:简答题、理论题、实践题和程序设计题。这四类习题使学生能理解、掌握各类数据结构,并启发学生做进一步的思考。
正是因为本书的种种优点,我们认为把本书译成中文能让更多的学生从中获益,从而打下扎实的程序设计和数据结构的基础。
参加本书翻译工作的有翁惠玉、严骏、杨鑫、周莉芳和蒋泱泱。第1章到第3章是由杨鑫翻译的,第4章到第7章由严骏翻译,第8章到第12章由周莉芳翻译,第13章到第15章由蒋泱泱翻译,第16章到第20章由翁惠玉翻译。由翁惠玉对全书进行审校。
由于译者水平有限,书中难免有错漏之处,希望读者不吝赐教。...
从内容上来看,本书内容详实,既包含了经典的数据结构的内容也包含了一些高级的、分析较为复杂的数据结构的内容。特别是高级数据结构部分是数据结构领域中的研究进展的一个较好的总结。本书内容的另一个特点就是为算法提供了较为严密的运行时间的分析,这些分析需要较扎实的数学基础,但分析并不影响算法的实现。教师可以根据教授的对象选择不同的内容。同时本书还结合了程序设计语言的发展,在数据结构的实现中应用了Java 5.0中的许多新增特性,包括泛型程序设计和泛型集合类的设计。..
作为一本教材,习题的设计是一个重要的环节。作者对此做了大量的工作,设计了大量的、适合不同层次学生需要的习题。本书的习题有四种形式:简答题、理论题、实践题和程序设计题。这四类习题使学生能理解、掌握各类数据结构,并启发学生做进一步的思考。
正是因为本书的种种优点,我们认为把本书译成中文能让更多的学生从中获益,从而打下扎实的程序设计和数据结构的基础。
参加本书翻译工作的有翁惠玉、严骏、杨鑫、周莉芳和蒋泱泱。第1章到第3章是由杨鑫翻译的,第4章到第7章由严骏翻译,第8章到第12章由周莉芳翻译,第13章到第15章由蒋泱泱翻译,第16章到第20章由翁惠玉翻译。由翁惠玉对全书进行审校。
由于译者水平有限,书中难免有错漏之处,希望读者不吝赐教。...
前言回到顶部↑
本书是为计算机科学专业的两学期课程而设计的,从讲述什么是数据结构开始,延伸至高级数据结构和算法分析。.
数据结构课程的内容已经经过了若干年的演变,尽管对于它所覆盖的内容有一些共识,但在细节问题上还有大量的分歧。大家都接受的一个主题是软件开发的原理,最主要的是封装和信息隐藏的概念。从算法方面来看,所有的数据结构课程都趋向于包括运行时间分析、递归、基本排序算法和基本数据结构的介绍。许多大学还提供高级的课程,在更高的层次上讨论数据结构、算法和运行时间分析的问题。本书的内容是为这两个层次的课程设计的,这样就不必要购买第二本教材。
虽然在数据结构领域最激烈的争论都围绕着程序设计语言的选择,但还需要做出如下一些基本选择。
·是否要尽早引入面向对象的设计或基于对象的设计。
·数学上的严密程度。
·在数据结构的实现和使用之间的适当平衡。
·与所选语言相关的程序设计细节问题(如是否应该较早地使用GUI)。
我写本书的目的是从抽象思维和问题求解的观点提供对数据结构的实用介绍。我试图覆盖有关数据结构、它们的分析以及它们的JayaZ现的所有重要细节,而不是停留在理论上很有趣但没有被广泛使用的数据结构。想在一个学期的课程中讲完本书中所有不同数据结构的使用与分析是不可能的,因此本书允许教师灵活地选择所教授的内容。教师需要确定在实践和理论之间的适当平衡,然后选择最适合课程的内容。正如前言后面讨论的那样,我按照尽量减少各章之间依赖性的原则来组织本书。
独特的方法
我最基本的前提是所有语言的软件开发工具来源于大的库,许多数据结构都是这些库的一部分。我预测数据结构课程的重点最终将会从实现转向使用。本书采用独特的方法将数据结构分成说明和实现两部分,并利用已有的数据结构库:Java集合类API。
第一部分的第2章中完整地讨论了集合类APl中适合于大多数应用的一个子集。第一部分也覆盖了基本的分析技术、递归和排序。第二部分包含了集合类API中数据结构的一组应用。直到第三部分才讨论集合类API的实现,而这时这些数据结构早已用到了。因为集合类API是Java的一部分,因此学生可以尽早用已有的软件组件设计大的项目。
尽管本书中有许多集合类API的应用,但它既不是关于集合类API的书,也不是关于集合类API具体实现的初级教材,它仍然是一本强调数据结构和基本问题求解技术的书。当然,数据结构的设计中所用的通用技术在集合类API的实现中都可用,因此第三部分中有几章包括了集合类API的实现。不过教师可以在第三部分中选择较简单的实现,以避免讨论集合类API的协议。第2章介绍了集合类API,它是理解第二部分中的代码的基础。本书试图只用集合类API的基本部分。
许多教师宁愿采用更传统的方法,即首先定义、实现每种数据结构,然后才是应用。因为第二部分和第三部分的材料之间没有依赖性,因此传统的课程也能采用本书。
预备知识
使用本书的学生应该具备面向对象或面向过程的程序设计语言的知识。基本的知识包括基本数据类型、运算符、控制结构、函数(方法)以及输入和输出(但不一定要知道数组和类)。
离散数学的知识也是非常有用的,但不是绝对的预备知识。书中给出了一些数学证明,但更复杂的证明要通过复习数学知识来实现。第3章和第15章~第20章需要一定程度的数学水平。教师可以简单地跳过数学证明部分,而只说明结果。本书的所有证明都清晰地标记出来,与正文分开。
第3版所做修改小结
(1)本书的代码使用泛型(generics)进行了完全重写,泛型是Java 5引入的一种技术。代码还大量使用了增强的for循环和自动装箱。
(2)在Java 5中,优先级队列是标准集合类API的一部分。这个修改反映在第17章的讨论和第二部分的某些代码中。
本书的结构
数据结构课程的内容已经经过了若干年的演变,尽管对于它所覆盖的内容有一些共识,但在细节问题上还有大量的分歧。大家都接受的一个主题是软件开发的原理,最主要的是封装和信息隐藏的概念。从算法方面来看,所有的数据结构课程都趋向于包括运行时间分析、递归、基本排序算法和基本数据结构的介绍。许多大学还提供高级的课程,在更高的层次上讨论数据结构、算法和运行时间分析的问题。本书的内容是为这两个层次的课程设计的,这样就不必要购买第二本教材。
虽然在数据结构领域最激烈的争论都围绕着程序设计语言的选择,但还需要做出如下一些基本选择。
·是否要尽早引入面向对象的设计或基于对象的设计。
·数学上的严密程度。
·在数据结构的实现和使用之间的适当平衡。
·与所选语言相关的程序设计细节问题(如是否应该较早地使用GUI)。
我写本书的目的是从抽象思维和问题求解的观点提供对数据结构的实用介绍。我试图覆盖有关数据结构、它们的分析以及它们的JayaZ现的所有重要细节,而不是停留在理论上很有趣但没有被广泛使用的数据结构。想在一个学期的课程中讲完本书中所有不同数据结构的使用与分析是不可能的,因此本书允许教师灵活地选择所教授的内容。教师需要确定在实践和理论之间的适当平衡,然后选择最适合课程的内容。正如前言后面讨论的那样,我按照尽量减少各章之间依赖性的原则来组织本书。
独特的方法
我最基本的前提是所有语言的软件开发工具来源于大的库,许多数据结构都是这些库的一部分。我预测数据结构课程的重点最终将会从实现转向使用。本书采用独特的方法将数据结构分成说明和实现两部分,并利用已有的数据结构库:Java集合类API。
第一部分的第2章中完整地讨论了集合类APl中适合于大多数应用的一个子集。第一部分也覆盖了基本的分析技术、递归和排序。第二部分包含了集合类API中数据结构的一组应用。直到第三部分才讨论集合类API的实现,而这时这些数据结构早已用到了。因为集合类API是Java的一部分,因此学生可以尽早用已有的软件组件设计大的项目。
尽管本书中有许多集合类API的应用,但它既不是关于集合类API的书,也不是关于集合类API具体实现的初级教材,它仍然是一本强调数据结构和基本问题求解技术的书。当然,数据结构的设计中所用的通用技术在集合类API的实现中都可用,因此第三部分中有几章包括了集合类API的实现。不过教师可以在第三部分中选择较简单的实现,以避免讨论集合类API的协议。第2章介绍了集合类API,它是理解第二部分中的代码的基础。本书试图只用集合类API的基本部分。
许多教师宁愿采用更传统的方法,即首先定义、实现每种数据结构,然后才是应用。因为第二部分和第三部分的材料之间没有依赖性,因此传统的课程也能采用本书。
预备知识
使用本书的学生应该具备面向对象或面向过程的程序设计语言的知识。基本的知识包括基本数据类型、运算符、控制结构、函数(方法)以及输入和输出(但不一定要知道数组和类)。
离散数学的知识也是非常有用的,但不是绝对的预备知识。书中给出了一些数学证明,但更复杂的证明要通过复习数学知识来实现。第3章和第15章~第20章需要一定程度的数学水平。教师可以简单地跳过数学证明部分,而只说明结果。本书的所有证明都清晰地标记出来,与正文分开。
第3版所做修改小结
(1)本书的代码使用泛型(generics)进行了完全重写,泛型是Java 5引入的一种技术。代码还大量使用了增强的for循环和自动装箱。
(2)在Java 5中,优先级队列是标准集合类API的一部分。这个修改反映在第17章的讨论和第二部分的某些代码中。
本书的结构


点击看大图





加载中...
