数据结构知识是计算机科学教育的一个基本组成部分,其他许多计算机科学领域都构建在这个基础之上。对于想从事实际的软件设计、实现、测试、维护工作的学生而言,掌握基本数据结构的知识是非常必要的。本书介绍的内容将会给从事以上工作的读者提供必要的知识。
本书突出了数据结构中的三个重要方面。首先,强调了数据结构与其算法之间的联系,包括算法的复杂度分析。接着,依照当前的设计和实现范例,使用面向对象的方法来介绍数据结构,特别强调了有助于封装与分解的信息隐藏原理。*后,本书的一个重要组成部分是数据结构的实现,它选择C++作为编程语言。
C++语言是C语言面向对象的后裔,在业界和学术界得到了广泛的应用,是一种非常**的编程语言。自然地,我们就选用C++来介绍数据结构。而且,由于C++语言在应用程序设计中的广泛使用以及这门语言的面向对象特性,使用它来讲授数据结构和算法课程(即使是入门级的课程)是非常合理的。
本书大多数章节都包括一个案例分析,它阐明了一个完整的、使用特定算法和数据结构的环境。为了说明所论述的主题的广泛应用范围,这些案例分析都是从计算机科学的不同领域中挑选出来的,包括解释程序、符号计算和文件处理。
本书自始至终包含了简要的C++程序例子,举例说明数据结构在实践中的重要性。然而,理论分析同样也很重要,所以算法的探讨都包含了对算法效率的分析。
要特别留意关于递归的介绍,因为即使是*高明的学生,在这个方面也会出现一些问题。经验表明,如果考虑运行时栈的话,就可以极好地说明递归的含义。我们不但在递归一章里在跟踪递归函数时显示出了栈的变化,在其他章节里也说明了栈的变化。比如说,如果不解释系统在运行时栈上所做的工作,甚至一个短小的树遍历函数也可能难于理解。在讨论数据结构和算法时,脱离系统,只从纯理论的角度出发是没有什么用处的。
这本书讨论的**是数据结构,而附带介绍其他一些主题仅仅是为了更好地理解数据结构。算法都是从数据结构的角度来讨论的,所以没有对各种算法进行全面的讨论,也没有列出介绍一个算法所需要的全部内容。然而,如前所述,本书将深入论述递归。另外,对算法的复杂度分析也介绍得比较详细。
第1和3~8章介绍了许多不同的数据结构以及使用这些数据结构的算法,分析了每一种算法的效率,同时给出了改进算法的建议。
● 第1章介绍了面向对象程序设计的基本原理,介绍了动态内存分配、指针的使用以及标准模板库(Standard Template Library,STL)。
● 第2章讲述了一些评价算法效率的方法。
● 第3章介绍了不同类型的链表,着重阐述了其指针实现。
● 第4章介绍了栈、队列及其应用。
● 第5章对递归进行了详细讨论。论述了不同类型的递归,并剖析了其中的一个递归
调用。
● 第6章讨论了二叉树,包括二叉树的实现、遍历和搜索。在这一章中还介绍了平衡树。
● 第7章详细介绍了更一般化的树,比如森林、2-4树、B树。
● 第8章介绍图。
第9~12章给出了前面章节所介绍的数据结构的不同应用,并强调了这些应用在数据结构方面的问题。
● 第9章详细介绍了排序,以及一些基础的和非基础的方法。
● 第10章讨论了散列,它是搜索算法中*重要的主题之一。在强调数据结构使用的同时介绍了各种各样的技术。
● 第11章讨论了数据压缩算法和相应的数据结构。
● 第12章介绍了内存管理的多种方法和相应的数据结构。
● 第13章介绍了字符串的**匹配和模糊匹配的许多算法。
● 附录A详细介绍了在第2章中提到的大O符号。
● 附录B介绍了标准模板库(STL)中的标准算法。
● 附录C证明了Cook理论,并用一个例子进行了说明。
每一章都包含了对一些材料的讨论,并配以合适的图表和表格。除第2章外,所有的章节都包括一个案例分析,这个案例分析是该章所讨论的特性的一个范例。所有的案例分析都在PC上用Visual C++编译器测试过,还在Unix上用g++编译器测试过,只有von Koch snowflake除外,它只在PC上用Visual C++测试过。每一章的*后是一些不同难度的练习题。除了第2章之外,所有的章节都包括了程序设计作业以及一些*新的相关参考书籍。
第1~6章(2.9、3.4、6.4.3、6.7、6.8节除外)包含了构成任何数据结构课程基础的核心内容。应该按照顺序来学习这些章。其后的6章内容可以按照任意次序学习。一个学期的课程可以包括1~6章、第9章,以及10.1和10.2节。整本书可以在一个学年中学完。
本书中示例程序的源代码可以通过Web站点http://www.course.com或http://www. tupwk.com.cn /downpage进行访问。
第3版的改动
新版本扩展了旧版本,主要包括一些当前未涉及到的新主题,如下:
● 第13章中的模式匹配算法
● 2.10节粗略介绍了NP完整性,8.12节列举了NP完整性的问题范例,附录C讨论了Cook理论
● 一些新图(8.9.1节、8.10.1节、8.10.2节和8.11节中的某些图)
● 7.1.7节讨论了vh树的删除算法
在整本书中还有许多小的改动。