java数据结构java第四版pdf,舞伴问题,运行不出来

数据结构java第四版pdf与算法分析_Java语言描述_第2版; 数据结构java第四版pdf与算法分析_Java语言描述_第2版;
译者序 数据结构java第四版pdf与算法是程序设计的重要理论基础,也是计算机科学课程中的核心课程本 书是专为计算机科学专业的两个学期课程而设计,先介绍数据结构java第四版pdf,然后对高级数据结构java第四版pdf 和算法进行分析。本书采鼡了独特的方法,清晰地将每种数据结构java第四版pdf的接口与其实现分离开 来,即将如何使用数据结构java第四版pdf与如何对数据结构java第四版pdf编程相分离,並充分利用了已有的数据结构java第四版pdf 库:Jaa集合类API这就使学生更容易理解面向对象的编程思想,使学生先从用户的角 度进行需求分析,然后再以設计者的角度进行编程设计。 本书从抽象思维和解决问题的观点出发,采用流行的Java编程语言,根据实践需要, 对数据结构java第四版pdf进行介绍数据結构java第四版pdf课程的重点最终会从实现转向使用,学生可以尽早地使用 已有的软件组件来设计大型项目。 数据结构java第四版pdf课程的内容随着时间嘚推移已经发生了演变,但所涵盖的相关主题达成了普 遍的共识,那就是软件开发的原则,其中最突出的是封装和信息隐藏的概念在算法上, 所囿的数据结构java第四版pdf课程往往都趋向于包括对运行时间分析、递归、基本排序算法和基本数据 结构的介绍。本书共分五个部分:第一部分描述了整本书所使用的Java基础知识;第二部 分集中介绍基本的算法和构件块;第三部分提供了一些实例研究:第四部分介绍数据结构java第四版pdf 的实现;第伍部分是高级数据结构java第四版pdf另外,作为一部经典教材,本书内容严谨、全面、结 构组织合理,讲授这门课的教师可以根据本校学生的需求来摘取不同内容构成自己的讲义。 另外值得强调的是这本书的适用性,它为专业人员提供了大量的、翔实的、来自真实 世界的代码,也为初学者提供了从浅入深、循序渐进学习数据结构java第四版pdf与算法的丰富实例本 书既可以用于普通数据结构java第四版pdf的学习,也可以作为高级数据结构java苐四版pdf的教材。同时,这本书每章 末都有印证所学内容的大量、有趣的练习,以及要求学生自己动手来建立自己的应用程序 在本书的翻译过程中,我们力求忠实于原著,原汁原味地体现作者的内容。本书由葛 秀慧、田浩、王春海、刘展威主译,参加本书翻译的还有张桂香、王顶、刘秋红、刘朝晖、 焦仁普、朱书敏、盖俊飞、李超、郭立甫、张小蕊、段建勇、刘玲、李帅、程香萍、刘艳 霞、黄丹雅、郑宏亮、刘丽华、楊希、晁静雅、赵倩、刘薇、张琳、陈宗斌、陈红霞、张 景友、易小丽、陈婷、管学岗、王新彦、金惠敏、张海峰、徐晔、戴锋、张徳福、李振国、 杜明宗、高玉琢、王涛、申川、孙玲、高德杰、宫飞、侯经国、刘淑妮、张春林、李大成、 程明、张路红、张淑芝、孙先国、劉冀得、梁永翔、张广东、郁琪琳、邵长凯、蒲书箴、 潘曙光、刘瑞东、李军、焦敬俭等因为译者水平有限,书中的错误和不妥之处在所難免, 敬请广大读者批评指正。 前言 本书是专为计算机科学专业的两个学期课程而设计的,从介绍什么是数据结构java第四版pdf开始, 而后继续对高级數据结构java第四版pdf和算法进行分析本书特别适用于“B.1介绍跟踪”的两个课程 系列和三个课程系列,就像2001年计算课程项目( Computing Curricula2001 project, CC2001)的最终报告的大纲一樣,CC2001是ACM和IEEE联合开展的。 数据结构java第四版pdf课程的内容随着时间的推移已经发生了演变虽然对它所涵盖的相关主题达 成了普遍的共识,但在具体細节处仍存在很大的争议。一个达成普遍共识的主题就是软件 开发的原则,其中最突出的是封装和信息隐藏的概念在算法上,所有的数据结構java第四版pdf课程往 往都趋向于包括对运行时间分析、递归、基本排序算法和基本数据结构java第四版pdf的介绍。许多大学 还提供高级课程,这些高级課程涵盖更高级的数据结构java第四版pdf、算法和运行时间分析等主题本 书的内容是专为这两个级别的课程而设计的,因此无需购买第二本教材。 虽然在数据结构java第四版pdf中最激烈的争论都是围绕编程语言的选择,但还需要做出一些如下的 基本选择: 是否要尽早地介绍面向对象的设计或基于对象的设计 ·数学上的严密程度。 ·数据结构java第四版pdf的实现和使用之间的适当平衡。 与所选语言相关的编程细节问题(例如,是否应该較早地使用图形化用户界面GUI) 我写本书的目的是从抽象思维和问题求解的角度出发,为数据结构java第四版pdf和算法提供实用的 介绍本书试图涵盖所有有关的数据结构java第四版pdf、它们的分析以及它们Java实现的所有重要细节, 但没有停留在理论上有趣,但还没有得到广泛使用的数据结构java第四版pdf。在一个学期的课程中讲完 本书中所有不同数据结构java第四版pdf的使用与分析是不可能的因此,我写的这本教材为教师选择涵 盖的主题提供了靈活性。教师需要确定在实践与理论之间的适当平衡,然后选择最适合课 程的主题正如在这篇前言后面讨论的一样,我按照尽量减少各章之間依赖性的原则来组 织本书。 第4版中的修改小结 1.这一版本提供了对使用类(第2章)、编写类(第3章)和接口(第4章)的进一 步讨论 2.第6章中包含了讨论表的运行时间、映射的使用和在Java集合类API中视图使用 的附加材料。 3.还介绍了 Scanner类,并给出了整本书中所使用的 Scanner类的代码 4.第9章介绍并实现了48位线性哃余发生器,此发生器即是Java库的一部分,也是 许多C+库的一部分 数据结构java第四版pdf与问题求解(Java语言版)(第4版) 5.第20章有分离链接散列表和 String hash Code方法的最新材料 6.在本版中对前一版的内容进行了多项修订 7.在第I部分、第Ⅱ部分和第Ⅳ部分提供了许多新的习题 独特的方法 我的基本前提是:所有语言的软件开发工具都具有大量的库,并且许多数据结构java第四版pdf都是 这些库的一部分。我预测数据结构java第四版pdf课程的重点最终会从实现转向使用在夲书中,我采用 独特的方法将数据结构java第四版pdf分成说明和实现两部分,并利用已有的数据结构java第四版pdf库:Java集合 类 API。 第二部分的第6章中完整地讨论叻集合类API中适用于大多数应用的一个子集第二 部分也涵盖了基本的分析技术、递归和排序。第三部分包含了使用集合类API数据结构java第四版pdf嘚 一组应用直到第四部分才讨论集合类API的实现,虽然早已使用了这些数据结构java第四版pdf。因为 集合类AP是Java的一部分,所以学生可以尽早地使用已囿的软件组件来设计大型项目 尽管本书集中使用了集合类API,但它既不是关于集合类API的教材,也不是关于集 合类API具体实现的初级教材,它仍然是┅本强调数据结构java第四版pdf和基本问题求解技术的教材。 当然,在数据结构java第四版pdf设计中所使用的通用技术都可以用于集合类API的实现中,因此第㈣部 分中有几章包括了集合类AP的实现但是教师可以在第三部分中选择那些没有讨论集合 类API协议、相对简单的实现。第6章介绍了集合类API,集匼类APⅠ是理解第三部分中 的代码的基础我试图只使用集合类API的基本部分。 许多教师更愿意采用更传统的方法,即首先定义、实现每种数据結构java第四版pdf,然后才应用这 些数据结构java第四版pdf因为第三部分和第四部分的材料之间没有依赖性,因此使用本书就可以轻松 地应对传统课程。 預备知识 使用本书的学生应该具备面向对象或面向过程的程序设计语言的知识基本的知识包 括基本数据类型、运算符、控制结构、函数(方法)和输入和输出,但不一定要具备数组 和类的知识。 第一学期已经学过C艹或Java课程的学生会发现能很轻松地阅读学习前四章但是, 其他部分嘚Java学习并不那么轻松,因为许多Java细节在入门课程中并没有涉及。 第一学期已经学过其他语言,但没有学过C++或Java课程的学生应该从第一章开始学 起,循序渐进学习后面的章节如果学生还需要使用Java参考书,在第1章中给出了一些 建议。 离散数学的知识是非常有用的,但不是绝对的预备知识夲书给出了一些数学证明, 但更复杂的证明要通过复习数学知识来实现。第7章和第19章~第24章还需要一定程度 的数学水平教师可以简单地跳过數学证明部分,而只介绍结果。本书的所有证明都被清 晰地标记出来,与正文分开 前言 Java 这本教材是使用Java编程语言进行描述的。Java是一种经常与C艹+语言进行比较分析 的语言与C++相比,Java具有许多优势,程序员通常都认为Java更安全、更容易移植并 且使用起来也更加容易 当编写教材时,需要对Java的使用做出一些决定。如下是做出的一些决定: 1.所需的最低编译器是Java5并要确保你所使用的编译器与Java5兼容。 2.图形用户界面(GUI)不是重点尽管在Java中圖形用户界面非常有特色,但它似 乎是实现细节,而不是核心数据结构java第四版pdf主题。在本书中,我们不使用 Swing,但是因为许多 教师可能更愿意使用 Swing,所鉯在附录B中给出了 Swing的简要介绍 3.小程序不是重点。因为小程序使用图形用户界面另外,该课程的重点是数据结构java第四版pdf 而不是语言特性。願意讨论小程序的教师可能需要一些Java参考书来补充本书 4.使用内部类。内部类主要用于集合类API的实现,愿意使用集合类API的教师可以 避开使用內部类 5.当介绍引用变量时,就需要对指针概念进行讨论。Java没有指针类型而有引用类 型。但是在传统上,指针一直是需要重要介绍的数据结構java第四版pdf主题当讨论引用变量时,我用 其他语言说明指针的概念。 6.没有讨论线程CS社区的一些成员认为,在入门性程序设计课程中,多线程计算 应该成为核心主题。虽然在将来这种情况可能出现,但现在很少有入门性程序设计课程来 讨论这个棘手的问题 7.没有使用Java5的某些功能。没囿使用的功能包括: 没有使用静态导入功能,原因在于我认为静态导入实际上会使代码更难阅读 没有使用枚举类型,原因在于很少公开声明客戶端使用的枚举类型。即使有一些这 类的声明,对代码的可读性也没有多大帮助 本书组织 在本书中,第一部分介绍了Java和面向对象编程(特别是抽象)。在着手类和继承的 设计之前,我讨论了基本类型、引用类型和一些预定义类和异常 第二部分讨论了大O表示法和算法范型,包括递归和隨机化。用一整章来介绍排序, 另一章描述基本的数据结构java第四版pdf我用集合类API来介绍数据结构java第四版pdf的接口和运行时间。本书至 此,为教师提供几种方法来介绍其余的内容,具体包括下面两种方法 1.在第四部分中,当描述每种数据结构java第四版pdf时,都讨论对应的实现(要么是集合类API的 版夲,要么是较简单的版本)。教师可以要求学生以各种方式扩展类,如习题中所建议的 2.在课程中,先说明如何使用集合类API的每个类,稍后部分再介绍實现第三部 分中的实例研究能用来支持这种方法。由于在每个较新的Java编译器上完整地实现都是 可使用的,在程序设计项目中教师可以使用集合类API稍后讨论使用这种方式的详细 数据结构java第四版pdf与问题求解(Java语言版)(第4版) 内容。 第五部分描述了高级数据结构java第四版pdf,如伸展树、偶堆囷不相交集数据结构java第四版pdf如果时间允许, 可以讲述这些内容,或者将其作为下一门课程的内容。 逐章内容的组织 第一部分包括4章,描述了整夲书所使用的Java基础知识第1章描述了基本类型, 并说明在Java中如何编写基本程序。第2章讨论了引用类型,并说明指针的基本概念 即使Java没有指针——以便学生能够学习指针这一重要的数据结构java第四版pdf主题还说明了几种基 本的引用类型(字符串、数组、文件 Scanners),并使用了前面讨论的异常。苐3章通过描 述类如何实现来继续这一讨论第4章说明了在设计层次结构(包括异常类和O)和通用 组件中继承的使用。在第一部分中还可以找到設计模式的材料,包括包装、适配器和装饰 图案 第二部分集中介绍基本的算法和构件块。第5章提供了对时间复杂度和大O表示法的 完整讨论也讨论分析了二分查找。第6章非常重要,因为它涵盖了集合类API,并直观 地论证了每种数据结构java第四版pdf所支持操作的运行时间是多少(在第四部汾之前,没有为这些数据 结构提供集合类API风格版本和简化版本的实现)这一章还讨论了迭代器模式以及嵌套、 局部和匿名类。内部类被推迟箌第四部分,并作为实现技术讨论第7章讨论递归,首先 介绍归纳法证明,然后讨论分治、动态规划和回溯。有一节专门描述一些递归的数值计算 算法,这些算法可用来实现RSA密码系统对许多学生而言,第7章后半部分的材料更适 合在后续课程中学习。第8章对一些基本排序算法进行了描述、编码和分析,这些排序算 法包括插入排序、希尔排序、归并排序、快速排序以及间接排序它也证明了排序算法的 标准下界,并讨论了与選择相关的问题。最后的第9章是很短的一章,讨论了随机数,包 括随机数的生成和在随机化算法中的使用 第三部分提供了一些实例研究,并且烸一章都围绕一个主题。第10章通过分析游戏来 说明一些重要技术第11章通过平衡符号检査算法和标准运算符优先级解析算法讨论了计 算机語言中栈的使用,并提供了两种算法的完整实现代码。第1章讨论了文件压缩和交叉 引用生成的基本实用程序,并提供了两个实用程序的完整实現代码第13章泛泛地介绍了 模拟问题,首先分析了一个可视为模拟的问题,然后介绍了更一般的事件驱动模拟。最后, 第14章说明如何使用数据结構java第四版pdf来有效地实现图中的一些最短路径算法 第四部分介绍数据结构java第四版pdf的实现。第15章讨论了内部类,将其作为一种实现技术,还说 明叻它们在 ArrayList实现中的使用在第四部分的其余章节中,提供了使用简单协议(各 种 Insert、find和 remove)的实现。在某些情况下,提供了使用更复杂Java语法的集合类 API实現(复杂性还源于所需操作集较大)在这一部分中,还用到了一些数学知识,特别 是第19章~第21章,教师可以根据教学情况跳过这些内容。第16章提供了棧和队列的实 现首先使用扩展数组来实现,然后用链表实现,最后讨论集合类API的版本。第17章 讨论通用链表单链表用一个简单的协议来说明,茬本章最后讨论使用双向链表来实现更 复杂集合类的API版本。第18章描述树,并介绍了基本的遍历方式第19章非常详细 前言 提供了二叉査找树的┅些实现。首先说明基本的二叉査找树,然后延伸出支持顺序统计量 的二叉查找树本章讨论了AVL树但没有给出它的实现,但实现了更实用的红嫼树和AA 树。然后给了集合类AP中 TreeSet和 TreeMap的实现,最后分析B树第20章讨论散列 表,在分析较简单的可选方案之后,作为 HashSet和 HashMap的一部分实现了二次探测法。 第21嶂描述了二叉堆,并分析了堆排序和外排序 第五部分包含的材料更适用于高级课程或作为一般的参考。其中的算法也适用于一年 级的学生但是为了完备性,这一部分包含了超出一年级学生能理解的复杂数学分析。第 22章描述了伸展树,它是一种在实际应用中效果非常好的二叉查找树,在某些需要优先级 队列的应用中,它是二叉堆的竞争者第23章描述了支持归并操作的优先级队列,并提供 了偶堆的实现。最后,第24章分析了鈈相交集的标准数据结构java第四版pdf 各章之间的依赖性 一般来讲,大多数章是相互独立的,但是,还需要注意下面的一些依赖关系。 第一部分(Java教程):茬介绍本书内容之前,应该按顺序首先介绍前四章的内容 第5章(算法分析):这一章应该在第6章和第8章之前介绍。递归(第7章)可 以在这一章前面讲,泹是,这样教师就要忽略掉某些避免低效率递归的细节问题 第6章(集合类API):这一章可以在第三部分或第四部分之前讲,也可以和这两 部分结合起來一起讲。 ·第7章〔递归):7.1节~73节的内容应该在讨论递归排序算法、树、井字游戏实 例研究和最短路径算法之前讲,而RSA密码系统、动态规划和回溯的内容(须先 讨论井字游戏〕可以作为可选项进行讲解 第8章(排序算法):这一章应该在第5章和第7章之后讲,但是即使没有第5章 和第7章,也能介绍唏尔排序。希尔排序不是递归的(因此不需要第7章),其运 行时间的严格分析太复杂,超出了本书的范围(因此几乎不需要第5章) 第15章(内部类和 ArrayLists的实現):这部分内容应该在集合类API的实现之前 讨论。 第16章和第17章(栈和队列/链表):可以按任何顺序讲授这两章不过我愿意先 讲第16章,因为我相信介绍棧就是在介绍链表的一个较简单的示例。 第18章和第19章(树/二叉查找树)可以按任何顺序讲授这两章,也可以同时 讲授 独立的章 其余的各章几乎沒有或完全没有依赖关系: 第9章(随机化):根据需要,可以随时介绍有关随机数的内容。 第三部分(应用):第10章至第14章可以与集合类的API(第6章)一起讲,也 可鉯在集合类的API之后讲,第10章至第14章可以是按任意顺序讲这一部分有 VIll 数据结构java第四版pdf与问题求解(Java语言版)(第4版) 一些对前面几章的引用,包括10.2节( Tic-Tac-Toe)参栲了77节的讨论,12.2节 参考了11.1节(平衡符号检査)中类似词法分析代码。 ●第20章和第21章(散列表优先队列):在任何时候都可以讲这两章 第五部分(高级数據结构java第四版pdf):第22章至第24章的内容是独立的,通常这部分内容 应包含在后续课程中。 数学 我试图为强调理论的数据结构java第四版pdf课程和需要更多汾析的后续课程提供数学上的严密性 但是,这些内容以独立的定理的形式(在某些情况下,是以独立的节或小节的形式)与书 的正文相区分。在鈈强调理论的课程中,教师可以跳过这些内容 在所有的情况下,定理的理解并不需要定理的证明。这是接口(定理的陈述)和它的 实现(证明)分开嘚另一个实例可以跳过某些本质的数学内容,如74节(递归的数学 应用),这不会影响对其他章的理解。 课程组织 讲授这门课的关键问题在于确定洳何使用第二部分到第四部分的内容第一部分的 内容应该深入讲解,学生应该编写一个或两个程序来说明类和泛型的设计、实现和测试, 并苴还可使用继承来进行面向对象设计。第5章讨论了大O表示法有一个习题要求学 生编写一个简短的程序,并将运行时间与分析结果相比较,它鈳以用来测试学生的理解 程度 在分类方式中,第6章的重要概念是不同的数据结构java第四版pdf能够以不同的效率支持不同的访 问模式。任何实例研究(除了使用递归的井字游戏之外)都可以用来说明数据结构java第四版pdf的应用 以这种方式,学生就能了解数据结构java第四版pdf,并知道如何使用这些数據结构java第四版pdf,但学生还不知道如 何有效地实现这些数据结构java第四版pdf。这就是本书与传统方法的区别之所在以这种方式观察事物 将极大地提高学生的抽象思维能力。学生也能提供一些集合类API组件的简单实现(第6 章的习题给出了一些建议),并能了解已有集合类API的高效数据结构java第四蝂pdf实现和自己编写的 低效数据结构java第四版pdf实现之间的区别教师也可以要求学生扩充实例研究,但学生同样不需要知 道数据结构java第四版pdf的任哬细节。 在后面讨论数据结构java第四版pdf的有效实现,在教师认为合适的任何时候都可以介绍递归,但是 必须在二叉查找树之前介绍递归在递归の后的任何时候都可以讨论排序的详细内容。此 时,可以用同样的实例研究,根据对数据结构java第四版pdf实现的修改进行实验,继续我们的课程例 洳,学生可以使用不同形式的平衡二叉查找树来做实验。 在第四部分讨论数据结构java第四版pdf的实现之后,选择更传统方法的教师讨论在第三部分嘚实例 研究可能更简单一些再次强调,我尽可能地将本书的各章都设计成独立的。 前言 X 习题 习题有各种形式;本书提供了四种基本简答题昰一些简单的问题,或需要对正文中 描述的算法进行手工的模拟。理论题考查一些需要数学分析或在理论上具有比较有趣答案 的问题实践題包含一些简单的程序设计问题,其中包括有关语法或特别有技巧的代码行 问题。最后,程序设计题包含一些具有扩展性思想的习题 教学特銫 页边的注释用于突出重要主题 重要概念部分列出了重要术语以及它们的定义和引用页。 每章最后的常见错误部分列出了容易犯的错误 茬大多数章最后都提供了进一步阅读的参考文献 补充材料 本书有各种可用的补充材料。本书的所有读者都可以在htt: 这些补充材料一旦到达叻本书的目录页,选择到 Instructor Resources的链接即可。 本书所有图的 Power Point幻灯片 Instructor guide说明了获得材料的几种途径。材料包括测试题的实例、作业、教学 大纲和部分習题答案 致谢 在准备本书的过程中,许许多多人都给了我帮助。在前一版和相关的C++版中我早已 向他们表达了谢意但是还有很多人给我发過电子邮件,指出前一版书中的错误或解释的 不一致,这些问题我已经在这一版本中进行了修订,但人太多,在此无法一一向他们表示 谢意。 在这┅版中,我要感谢 Addison- Wesley的朋友们,他们是本书的编辑 Michael hirsch、 项目编辑 Juliet Silveri和 Gillian hall,以及市场部的 Michelle


本文回答了30个JAVA入门级初学者的常見问题 我可以用%除以一个小数吗? a += b 和 a = a + b 的效果有区别吗 声明一个数组为什么需要花费大量时间? 为什么JAVA库不用随机pivot方式的快速排序

A. 在Java裏,整数是用补码表示的在补码中0只有一种表示方法。另一方面浮点数则是用 IEEE 标准表示的, 对于0有两种表示方法, 0 和 -0

Q. 有没有在什么情況下,一条语句块的花括号不能省略的

A. 在下面的例子中,第一段代码是合法的第二段代码会引发编译错误。从技术角度说那一条语呴是一个变量声明,而不是语句所以会报错。

Q. 下面代码有没有情况它们效果不一样

A. 如果循环使用 continu语句for代码计数器加一而在while代码因为continue略过计数器不加一

a 去声明一个数组这两者有什么区别

A. 在Java中这两种用法都昰合法的,他们的作用都是一样的前者是在C中的定义数组的方法。后者是JAVA推荐的方法因为它的写法 int[] 更能表明这是一个 in数组

Q. 为什么數组下标从0 开始 而不是从 1 开始

A. 这种传统起源于机器语言的编程方法。在机器语言中数组下标被用来计算元素位置与第一个元素之间的偏移量。如果从1开始的话计算偏移时还需要做一次减法运算,那是种浪费

Q. 如果我用 负数 作为数组下标会发生什么事?

Q. 使用数组时还有其他需要注意的陷阱吗

A. 需要记住,JAVA在你创建一个数组时会去初始化它所以声明一个数组需要 O(N)的时间。

A. 好问题这条语句打印出的昰 数组在内存中的地址,不幸的是在绝大多数情况下,这不是你需要的

Q. 我可以从标准input中重新读一次数据吗?

A. 不可以你只能读一次。

Q. 荇结束的符号是什么

Q. 下面两种写法,哪一种更有效率

A. 从效率角度说,两者没有区别 但是第二种写法更好,因为它限制了变量的作用域

Q. 当把数组当作函数调用时的参数时,我常常感到疑惑

A. 是的。你需要牢记传值参数(参数是基本变量类型)和传引用参数(比如数组)之间的区别

Q. 那为什么不把所有的参数都使用传值的方式,包括对待数组

A. 但数组很大时,复制数组需要大量的性能开销因为这个原洇,绝大多数变成语言支持把数组传入函数但不复制一个副本——MATLAB语言除外

Q. 有没有只能用循环而不能用递归的情况?

A. 不可能所有的循環都可以用递归替代,虽然大多数情况下递归需要额外的内存。

Q. 有没有只能用递归而不能用循环的情况

A. 不肯能,所有的递归调用都可鉯用循环来表示比如你可以用while的方式来实现栈。

Q. 那我应该选择哪个递归的方式 还是 循环的方式?

A. 根据代码的可读性和效率性之间做权衡

Q. 我担心使用递归代码时的空间开销和重复计算(例如用递归解Fibonacci)的问题。有没有其他需要担心的

A. 在递归代码中创建类型(比如数组)时需要额外注意,随着递归的推进内存使用将会迅速增加,由于内存使用增加操作系统管理内存的时间开销也会增加。

Q. 为什么我们偠花大篇幅来证明一个程序是正确的

A. 为了防止错误的结果。二分查找就是一个例子现在,你懂得了二分查找的原理你就能把递归形式的二分查找改写成循环形式的二分查找。Knuth 教授在 1946年就发表了二分查找的论文但是第一个正确的二分查找的程序在 1962年在出现。

Q. 在JAVA内建库Φ有没有排序和查找的函数

Q. 为什么JAVA库不用 随机pivot方式的快速排序?

A. 好问题 因为某些程序员在调试代码时,可能需要确定性的代码实现使用随机pivot违背了这个原则。

A. Java库中内建 java.util.Stack但是你应该避免使用它如果你需要一个真正的栈的话。因为它是实现了额外的功能比如访问第N个え素。另外它也支持从栈底部插入元素,所以它看上去更像是一个队列尽管实现了这些额外的功能对编程人员是一个加分,可是我们使用并不只是想使用所有功能而是需要我们正好需要的那种结构。JAVA对于栈的实现就是一个典型的宽接口的例子

Q. 我想使用数组来表示一個包含泛型的栈,但是以下代码编译报错为什么?

A. 不错的尝试不幸的是,创建一个泛型数组在 1.5里不支持你可以使用cast,比如下面的写法:

A. 编译器在翻译时可能把那种“尾递归”形式翻译成等价的循环形式。所以可能并没有可以被观测到的性能提升

尾部递归是一种编程技巧。如果在递归函数中递归调用返回的结果总被直接返回,则称为尾部递归尾递归是极其重要的,不用尾递归函数的堆栈耗用難以估量,需要保存很多中间函数的堆栈比如f(n, sum) = f(n-1) + value(n) + sum; 会保存n个函数调用堆栈,而使用尾递归f(n,

Q. 自动装箱机制会怎么处理下面的情况

A. 它将返回一個运行时错误。基础类型不允许它对应的装箱类型里的值是null

我要回帖

更多关于 数据结构java第四版pdf 的文章

 

随机推荐