数据结构学习(C++)续——续篇后记

类别:VC语言 点击:0 评论:0 推荐:

我觉得续篇的写作我很不负责任,越到后面越是如此,可能是我没有打算写的缘故,或者说是“心浮气躁”——写了几个月有点熬不住了,^_^。但也可能我只能写到这样,毕竟这部分离我们太远,至少和前边的“数据结构”相比是太远。

有人说,查找和排序的算法已经非常成熟了,大师们穷尽脑汁也不可能带来“质的飞跃”了,而像我们这些等着“吸收前人劳动果实”的人,能全盘吸收就甚为不易,更不要说“完成前人所未完成”了。因此,对于教科书上面的讲解,除非作者治学态度有问题(信口开河),否则没有什么好讲的。正像我前面所说的,我只是给大家读书的时候起个向导的作用,并不是想写本书,因此很多的地方都省略了。我所写的,如果使得书上枯燥的数学分析具体化,各种方法的提出不再显得突兀,我就心满意足了。

对于排序,我还显得有点耐性,除了锦标排序和基数排序、外部排序,其他的都给出了例程;对于查找,除了顺序查找和折半、插值查找,二叉搜索树,AVL树,其他的都是说说而已。造成这种结果,固然是我耐性有限,但这也是现状所致——什么东西要是不带个数据库什么的就显得不够专业,有了数据库,B-树什么的还要它作甚?说这话的时候,我常常显得很无奈,但确实是这种现状的受益者。

最后,说说怎样看待数据结构——谈这个话题就是找骂,但到了最后了,我也不怕了。数据结构现在的地位很尴尬,几乎每个有志于写程序的人都把数据结构摆在必须掌握的知识的第一位,但实际上,当必修课学的、计算机专业的学生学完之后,一半茫茫然;而非计算机专业的,甚至没学过数据结构的,程序员也干得好好的。

计算机的应用能到今天的地步,数据结构功不可没,没有串、表、树、图,计算机只能在数值计算里面打转转——现在掉过来了,真正的数值计算反倒没有多少人会写了,^_^。但,这和汇编(更有甚者是01代码,我光知道90是NOP,^_^)的处境一样,汇编也曾在计算机发展上的作用无可估量,而现在会的人真是寥寥无几,就连C的境域也是如此,虽然每所大学不管是不是计算机专业都开设C语言课程。

可以说,我们写的每个还算有点功能的程序,都离不开数据结构。比如我们当初学C的时候,都做过这样的练习:将一组输入的数据逆序输出。我们每个人几乎都能想到先拿数组存起来,然后倒着再输出。我们在这里其实就利用了线性表,只是我们没意识到。再比如我们需要一段排序的程序,而在我们没学过排序方法的时候,大多数人都会写出直接选择排序——不断的在剩下的当中选出最大(小)的不就行了吗?同样的,我们也没意识到这叫直接选择排序。

在写程序的过程中,我们都会不知不觉的运用到数据结构,即使没学过,因为数据结构本来就是来自于实践中的。这恰巧说明了为什么没学过数据结构的人照样能当好程序员。然而这种自发的运用是有限度的,这取决于一个人的天分,我始终认为第一个想出汉诺塔递归解法的人真是天才。而现在汉诺塔成了每一个学过数据结构的人不愿再费脑筋的问题“切,简直不值一提”,真不知道当初他们对着那不过三四行的代码发出了多少惊叹。人类能走到今天,文字(语言)、纸张、印刷术功不可没,换句话说,就是知识的积累和传播。站在巨人的肩膀才能看得更远,学了数据结构,解决问题的能力才会更强。就比如我,以前别说求最短路径了,从一个点到另一个点求一条通路都不会。

我想上面也回答了为什么有些人学完数据结构一头雾水了。数据结构是一门从实践中发展来的学问,虽然在它的发展过程中,数学等其他学科起到了重要作用,但它仍然是一门实践的学问,也就是说,没有实践,它什么都不是。Foxmail的作者张小龙说,那些在教室里死啃书本的学生固然可能在考试中拿高分,但只有你真正去写一个什么东西,才会真正理解数据结构是什么。话很朴实,但这正是很多人学完数据结构得到的仅仅是几个学分的原因。

目前数据结构学完等于白学的状况的产生,是两方面的原因,书和学生都有责任。有些人对着枯燥的标准文档(比如死啃ISOxxxx的神人们)一样能得到想要的知识;而一些优秀的教科书确实影响了成千上万的学生。在没有好书的时候,就能显出某些人的天资过人(亦或者是勤能补绌);而只有好书的出现,才会有更多的合格人才。

就目前我看过的教科书而言,《数据结构算法与应用-C++语言描述》算是最好的了,不为别的,单是每章的应用部分就足以配得上“最好”二字。网上有电子版,囊中羞涩的可以DOWN下来看看。当然,有精力和耐心的,我还是建议去看Knuth那三本,从那里得到的不仅仅是数据结构,更多的是学到了如何应用你所学的理论,很遗憾的是我只是挑着读了几章。

本文地址:http://com.8s8s.com/it/it1153.htm