最近一段时间以来,给我留言咨询“数据结构与算法学习”方面问题的读者很多,大家都从各自不同的角度提出了自己在学习过程中的困惑,也问到了一些具有突出共性的实际问题。今天我就简单的来汇总一下。
首先是一些问题的解答:
第一大类问题:请我推荐一些学习数据结构和算法方面的书籍:
以下是问题选摘——
陈同学:老师,有什么好点的算法的书啊,关于c或c++的,介绍几本给我!
menghuann:专家你好,我现在正在自学严蔚敏的数据结构(c语言版),感觉很难,这本书说他是用伪c描述的,请问伪c和c++有什么区别? c于与c++的区别大吗?我看谭浩强的《c程序设计》会不会影响我学习c++和严蔚敏的数据结构(c语言版)呢?
menghuann:左专家,你好,上次你提到学习严蔚敏的数据结构(c语言版)是为了应付考试,确实是这样。感觉这本书很难,而我又没有什么编程基础,所以想请教您怎样学好这本书?
排除语言层面上的问题,上述几位朋友都问到了关于“书”的问题。简单的说,你如果要想把这个东西(数据结构与算法)学好,自己备一本(至少一本)专门讲这个东西的书肯定是必须的。我很难想象出如果你想把这个东西学好,然后又不用看书的方法...工欲善其事,不先利其器。一本好的书能够让你学得更轻松,能够让你理解更深刻,让你学得更系统。有的人会说,网络这么大,我就上网找资料学,问题上网上的东西,例如帖子或电子文稿,都非常不系统。就好像你中学学物理,只学了力学和热学,却没学电磁学,就算你力学学得再好,你能去参加高考吗?所以如果是个一瓶子不满半瓶子晃的水平,那根本就不能说自己学了或者学会了,这都言之过早啦。所以要是缺了一本正经八百的书,那在此之后所有的意见和学习方法都是无从谈起了。
讲数据结构和算法的书太多了,真是太多了,不过好的不多啊,呵呵。严格来说,有的书是专门讲算法的,有的书是专门讲数据结构的,这两个其实不是同一个东西,这点大家应该有所明确(至少连名字都不一样吧)。但是这两个东西彼此又紧密联系,所以更多的书选择把它们融合起来讲,这也是可以的。
好了言归正传该推荐书了。前面说了,书是很多的,而且其中有些书很经典,但是我奉劝同学们不要太好高骛远,还是脚踏实地点好,俗话说:万丈高楼平地起啊。一些特别经典的东西理解起来偏难,例如:Knuth的那套《计算机程序设计艺术》(现在分卷分册的中英文对照版国内已经都出了),以及《算法导论》,这两部书都很经典,但刚开始可能不太适合大家。对于普通人来说《算法导论》到研究生阶段再看还比较适合,Knuth的那个除非你是专门搞程序设计与算法方向的,不然就省省吧。
另外,我是不太推荐国内高校教材的,这个原因我之前的关于选购计算机书籍的博文里都说得挺详细的了,我也不太明白好像有人就是特别喜欢买高校教材似的,自己都说看着吃力了还问我怎么才能学好。严老师的那个书我就翻过几页,根本没仔细看过,所以不便发表言论,我推荐的书最起码得是我自己看过了觉得不错的,如果都没仔细看过,那怎么能给各位乱推荐呢?
我下面推荐几本我认为比较好的:
1、《数据结构与问题求解(C++版)》,Mark Allen Weiss,清华大学出版社
这个书我觉得真是不错啊,算法和数据结构基本都讲到了,系统、充实,例子也很好啊,讲得也比较容易理解。而且里面的数据结构和算法都配有完整的代码实现,绝对能运行,真是不容易啊。老外这点真叫人感动,人家教授都是自己给自己的书编代码呀。中国的书里一般都是伪代码,呵呵,这样也省着调试了啊,哈哈。看了这个书,再做做它后面的习题,理论与编程能力双提高啊。缺点就是太厚了,不知道你有勇气读完没有,呵呵。目前中文版,英文版国内都可以买到,我中文版英文版都看过,中文版翻译和排版错误特多,大家小心啦。如果英文过了CET4,直接读英文版吧,挺通俗的。
2、《计算机算法设计与分析》,王晓东,电子工业出版社
这是一本国人写的专门讲算法设计与分析的书,喜欢专门搞算法而已经对数据结构很明白的同学可以看下,不过属于比较难懂得,呵呵,算法就是这样的,对逻辑思维要求更高些。
3、《算法与数据结构——C语言描述》(第2版),张乃孝,高等教育出版社
这其实是一本高校教材。大家别打我,因为没办法,有的网友非得让我给他推荐一本教材,我也很无奈。这方面的教材我看过好几本了,因为都看过才有资格说说他们的情况。这本书的好处是我个人觉得,首先是书很薄也不贵,而且内容比较规范,没有东抄西抄的现象,讲得也挺通俗易懂的,但是毕竟很薄所以内容谈不上特别充实吧(但基本该讲的,他也都讲到了)。另外不足就,里面的代码都是伪代码(就是没办法运行的,教材基本都是这个样子的),或者可以说代码很少,都是文字描述。能帮大家提高理论水平,但是学了这种书,我感觉还是不会用编程的方式来解决实际问题。
4、《C++数据结构原理与经典问题求解》,电子工业出版社
这个书是我写的。500多页,有点厚。我个人感觉是讲得还算通俗易懂吧,有些复杂的算法用了很大的篇幅去描述算法的过程,而且图特别多,一本书下来有大概400多张图表,我觉得这样更容易帮助读者理解。另外一个特点是,这书里面的代码都是绝对可以运行的,绝非伪代码,这里面结合具体的问题和一些经典实例都配有完整的代码。我觉得这样能够让读者提供实际的解决问题的编码能力。但是本书的不足在于(自己爆料一下),印刷错误比较多,这个超郁闷的,应该有二十几处,我自己有勘误表,你自己看的时候就得认真读啦,都是些一眼就看得出来的,也不会把你给带到沟里去吧。
关于荐书的问题就谈到这里,当然,我看到的书也肯定是有限的,我也不是所有的书都看过,所以可能有的好书没谈到,大家见谅吧。因此你也不必非得看我的推荐,这些仅仅是我看过的之中我觉得比较好的,呵呵。在下一篇博文里我将继续围绕大家关心的如何学好数据结构和算法问题进行讲解,不过如果你现在手头还没有一本讲数据结构和算法的书,那我觉得基本上下一篇文章也甭看了,不仔细读一本书,那是学不了地啊...
VIEWER DISCRETION IS ADVISED !!!
----------------------------------------------------
如果你想同我交流,欢迎点击链接http://student.csdn.net/invite.php?u=113322&c=a139a65a1494291d和我成为好友!