“数据结构”是计算机专业的基础与核心课程之一,也是从事软件开发必不可少的入门和常用知识。程序编写得好不好,很大程度上取决于编程者对数据结构是否熟练地掌握和恰当地运用。由于它不仅重要,而且易学难精,“数据结构”一直都被列入相关专业的研究生入学考试和相关行业的公司招聘考试的重点考查范围。
由于“数据结构”这门课程本身的特点,它必须依托于一种程序设计语言才能讲授,否则就成了空中楼阁、纸上谈兵。因此,尽管从抽象和逻辑的角度看来都大同小异,按照所依托的程序设计语言可以把“数据结构”的教材分为不同的版本--诸如Pascal版、C版、C++版以及Java版。除了由于程序设计语言的不同特性而导致的程序实现上的差异,不同版本的“数据结构”教材所讲述的主要内容并无本质区别。因此,初学者可以根据自己已经掌握的或者将作为主要使用的程序设计语言选择相应版本的“数据结构”教材来学习。将来如果换用另一种程序设计语言,也不需要重新学习另一个版本的“数据结构”教材,只需将其作为参考,查阅同样的数据结构是如何用另一种语言实现的即可。这也是为什么不同版本的“数据结构”教材都有其存在的意义。
近年来,Java越来越成为一种“热门”的语言。它不但是目前业界进行软件开发的主要语言之一,而且被国外不少大学选用为向计算机专业的学生传授的第一种程序设计语言。这固然除了Java语言本身的优点之外,也有商业利益和教育观念上的考虑,在此不作赘述。但本书并不是国内第一本基于Java的“数据结构”教材。之所以选择本书翻译并介绍给国内读者,主要是因为本书有以下几个独特的优点:
总的来说,数组和链表是数据结构的两种基本的实现方式。基于这两种方式,可以实现线性表、栈、队列、二叉树、树、图等从简单到复杂的数据结构及其各种变体。本书的内容涵盖了以上各个方面,以及对算法和算法复杂性的一些初步的介绍,从而构成了一本完整的数据结构教材。但本书不限于此,还在前3章和附录A~D中全面地介绍了Java语言,在某些方面其详尽程度甚至超过专门讲述Java语言的书籍。因此,即使未学过Java语言的读者,也可以将本书作为起点,在学习Java语言的同时学习数据结构。
本书在编写过程中特别考虑到了面向对象程序设计(OOP)的思想与Java语言的特性。它不是从基于另一种程序设计语言的数据结构教材简单地“改编”而来的,因此在数据结构的实现上更加“地道”地运用了Java语言,并且自始至终强调以面向对象的方式来思考、分析和解决问题。
本书在内容编排上,将每一种数据结构的说明与实现分开来,全书被划分为31个相对较短的章,从而为读者提供了阅读顺序的机动性。读者可以在阅读了一个数据结构的说明之后紧接着就学习它是如何用Java语言实现的,也可以首先通读各种数据结构的说明,然后才 考虑如何实现它们。
本书论述详细,深入浅出,含有大量的图示、应用示例和源程序,每章还配有自测题以及答案(在附录E中),不但可作为大专院校相关专业本科和研究生的教材,也非常适宜自学,以及作为开发软件时案头常备的参考书。
由于一些术语在国内存在不止一种译法,本书在翻译时只能尽量选用沿袭较广的译法,如果读者已经熟悉的是另一种译法,阅读时可能会感到不便,在此表示抱歉。书中的术语在第一次出现时均列出了相应的英文,供读者对照辨识。
本书的翻译出版是一个专家团队共同努力的结果。本书由金名主译,参加本书翻译工作的还有张长富、李伟、郭涛、高磊、王振营、冯哲、韩毅、马以辉、李腾、邓卫、邓凡平、周云、董武、郑晓蕊、陈占军、倪泳智、黄虹、吕巧珍、裘蕾、金颖、陈河南、王嘉佳、吴建伟、宋雁、何晓刚、段涛、马丽娟、郭翔、朱晓林、陈磊、李建锋、刘延军、刘子瑛、徐英武、魏宇、赵远锋、樊旭平、戴军、梁德成、梁彩隆、倪泳智、赵成璧、韦笑、李志云、余春、陈强、董岚枫、郭涛、、周京平、王炯、程烨尔、徐冬、唐玮、贺军等。真诚地欢迎读者对书中可能有的错误和不妥之处批评指正,读者的意见是我们改进的动力和依据。数据结构与算法分析(Java语言描述)(第2版) 欢迎阅读《数据结构与算法分析(Java语言描述)》的第2版。本书是作为数据结构入门课程的教科书而编写的。
本书的编写特别考虑了对象与Java。为了使学习更容易,我们采用的方式是:将读者的注意力一次集中在一个问题上,为读者提供阅读顺序的灵活性,以及明确区分抽象数据类型(ADT)的说明与实现。为了达到这些目的,我们将内容划分成31个相对较短的章,在每一章中或是论述ADT的说明及使用,或是论述ADT的实现,读者可以选择在阅读了一个ADT的说明之后紧跟着学习它的各种实现方法,也可以选择在考虑任何实现问题之前先探讨各种ADT的说明及使用。从本书的编写结构上讲,读者可以方便地选择自己偏爱的阅读顺序来学习。