图书前言

作者多年讲授“数据结构”课程,所用教材为清华大学出版社出版,严蔚敏、吴伟民编著的《数据结构(C语言版)》(以下简称为教科书)。根据多年的授课经验,作者深知学习“数据结构”的关键点: 

 首先,要产生兴趣,兴趣是求知的动力。

 其次,要加强形象思维训练,用形象思维帮助建立抽象思维。

 最后,要使算法活起来,使算法不再是抽象的、枯燥的、孤立的、晦涩的,而是具体的、生动的、互相有联系的、易于理解的。

本书是作者多年来潜心研究的成果,其中有许多独到之处: 

一、 本书不仅包括教科书中绝大多数算法的实现,对于许多主要的存储结构,也包括了它们的基本操作的实现。这些基本操作构成了存储结构的完整体系,使得该存储结构可以直接使用在需要的地方。如在第7章的拓扑排序中就用到了第3章顺序栈的存储结构和基本操作。作者也经常直接将本书的存储结构和基本操作用在自己的科研课题程序中,效果都很好。读者如果需要了解少数教科书中提及而本书中未提及的算法、存储结构和基本操作,可以参考阅读本书后面的参考文献[3]。

二、 为了加强形象思维训练,作者绘制了各种数据存储结构、算法、程序运行过程的示意图,共计281幅(有些图本身又由一系列小图组成)。这些图清楚地说明了数据的存储结构和算法。

三、 通过将算法编写到计算机可运行的程序中的方法,使算法活起来。对于可运行的算法,输出变量、单步执行、设置断点、修改算法、尝试各种输入数据等都是轻而易举的,这些做法都有助于深刻地理解算法。

四、 对于较难理解的算法都有详细的、图文并茂的解析,有些解析(如平衡二叉树)还包含作者自己的研究。较为简单的算法,也尽量利用程序中的空白处,多加注释。对于相应于教科书算法中须说明的新增行与修改行,在注释行中也分别注以“新增”与“修改”。

五、 本书第7章以后的许多程序中的数据来自文本格式的数据文件,避免了人工键盘输入的麻烦,也有利于掌握使用文件输入输出的方法(这是很多学生不熟悉,却又很重要的方法)。根据程序所用文件的格式,读者很容易编写出自己需要的数据文件。

六、 本书除了实现教科书中已有的算法,还实现了克鲁斯卡尔、2路插入排序(包括改进的2路插入排序)、树形选择排序等教科书中没有写出的算法。

七、 本书还包含了许多编程的技巧和小窍门,这些是作者多年编程所积累的经验。

有教科书和本书对算法和数据结构的详细讲解,又有可执行的程序,还有程序的运行结果,加上读者自己的思考和努力,还有什么学不会的呢?甚至会觉得,数据结构是简单的,又是有趣的,还是有用的。其中的许多算法是巧妙的、启迪心智的,徜徉其中,其乐无穷。

本书紧密配合教科书,故在章节编排上尽量与教科书保持一致,以便读者对照查找。教科书的第8章和第12章由于内容较为独立,并应用较少,故没有收进本书。因此,教科书的第9、10、11章在本书中相应地成为第8、9、10章。同样,教科书中有些节的内容没有收进本书,后面节的编号随之减小。但各章节的名称与教科书保持一致。

本书所有程序都在Borland C++ 3.1和Microsoft Visual C++ 6.0下运行通过。这些程序都可通过清华大学出版社的网站(www.tup.tsinghua.edu.cn或www.tup.com.cn)下载。

本书虽然是以严蔚敏、吴伟民编著的《数据结构》(C语言版)为基础,但对其他的数据结构教材的理解,也极具参考价值。

尽管作者尽了最大努力,但限于水平,书中疏漏之处在所难免,希望读者不吝赐教,以便将来改正。读者可通过本书的作者(gyfan@chd.edu.cn)与编辑(zhengyk@tup.tsinghua.edu.cn)取得联系。

作者

2007年11月于长安大学