如何学习数据结构?

本人学的是电子系,想考计算机的研究生,本科阶段接触的编程不算丰富,顶多是单片机的程序写的还算多!最近在学数据结构!感觉像c啊,数据结构啊很难学习到的本质!就是顶多肤浅的了解了下它的表面原理!你说要叫我写出二叉树的非递归遍历,二叉树的线索化,哈夫曼编码的实现,估计都得好困难!请问该如何在考研中复习好数据结构!特别是跨考生呢?是不是选用的教材不对!用的是严奶奶的教材
关注者
14142
被浏览
1247219

54 个回答

————————————————2015最后更新————————————————

---------------------------------新书新方法(兼容之前的答案)---------------------------------

这是我第4次更新这个答案了。我觉得是最终版本了。因为被我忽悠的师弟师妹都学了下去。看来这个办法真的有效果。再次强调,只是入门。


1. "我想学好基础的数据结构和算法! "
不多说,有这心就往下看。

2. "我应该准备些什么? "
a. 这本橙书: 《算法 第四版》
--亚马逊中文版: amazon.cn 的页面
--线上资源: Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne
b. 注册Coursera, 依次加入这2门课: <算法, 第一部分> <算法, 第二部分>
Part 1: coursera.org/course/alg
Part 2: class.coursera.org/algs
如果没开课, 就先标记, 这样开课时会通过邮箱提示你.

3. "我应该做些什么? "
先熟读书内1.1和1.2, 最好把课后习题都做一做. 网站上开课后(即使已经开课几周了, 没关系), 跟住上课内容: 课本知识 + 视频内容 + 课件重点+ Exercises (独立完成且满分) + Programming Assignments (独立完成且尽量满分) + Job Interview Questions. 从Part 1到Part 2, 跟住, 跟住, 跟住!


关于做书后练习题,参见:
算法 第四版(algorithms 4th edition ) 这本书有配套的习题答案吗? - 孟祥丰的回答

4. "我学完了呢!"
再去跟隔壁斯坦福的算法公开课, 他还给证书! 因为参考书籍基本上就是是《CLRS》, 所以也就是强迫自己去仔细研读算法导论.
---课程名称:
<算法设计与分析, 第一部分>
<算法设计与分析, 第二部分>
---课程地址
Part 1: coursera.org/course/alg
Part 2: coursera.org/course/alg

5. "又学完啦! "
可能今后在这个方面不需要看网络上不知名人士(没错, 就是我)的建议了. 拜拜.

PS: 就这些?? 对, 就这些.




———————————————2015-6-9 补充———————————————
Coursera上6月19号开普林斯顿讲的算法课程了:
Coursera - Free Online Courses From Top Universities
教材就是橙宝书:
Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne

课程负担并不大。刚入门的同学可以跟一跟。当然学习算法还是要多做题。^_^

—————————————————原答案—————————————————
我要好好回答一下这个问题。

从刚上大学在课堂上听老师讲解,到后来自学,反复学等种种失败经历给了我当头棒喝。我这样的小渣渣还真是难以捧本书看一看就能学懂。还真得特殊准备一套方法来学习它。借助知乎,网上大神,ACMer的经验分享,我自己总结了一个入门的学习方法,让我快乐且热情的坚持下来了对数据结构与算法的学习。(仅针对初学者的入门级学习,大神们请绕过,拜拜么么哒

好,剩下来像我一样的阿渣们,让我们先来痛快的分(tu)析(cao)下为啥这东西难学:
1. 抽象,数学知识多,大多数书籍有很多数学证明,很枯燥,爱掉头发。
2. 反馈差。比如学完了“快速排序”也就学完了,没什么事做,也没觉得自己厉害多少。但是要是学习下cocos2d-x,过几天自己都能写小游戏了。学了难以分分钟高能还真就难以坚持了。没错,学习这事我就是这么投机这么功利。
3. 孤立的知识点都很难有什么作为,只有理解+融汇+贯通才能显威力。
4. 没有好“老师”。搜索下“如何学习雅思&托福”,各种高能大法学习小组培训机构怒刷一脸屏。

好了,吐槽完毕,以下是干货:

1.先来本入门级的好书

我把里面的代码全打了一遍,整不懂就一点点在草纸上演示,还整不懂的就死记硬背了下来,说不定哪天就想通了。学起来很慢,但是效果不错。谁让我笨呢。(现在没事抽风还要默写一下AVL树的c实现,也是病没好)

2. 可视化
刚开始我就按照1这么学,学一周就学不动了,太高估自己的能力,又冒充不下去学霸了。这知识尼玛这么抽象。之后发现了一个可视化工具(很多大神都推荐过啦)
http://visualgo.net
什么冒泡插入快速排序一演示,小动画一播放分分钟我就都整明白了,一低头那些小代码也就都被我看穿看穿了。来一把倚天剑屠龙刀我也能混个山大王。
(图是二叉堆的演示)
一可视化之后你会发现很多抽象的数据结构在脑海中有了样子。我也说不太明白那种感觉,就好像你在一个姑娘/小伙子身上看到了爱情的样子。

3.编程实践
其实学习算法可以分3个部分,算法设计,算法分析,算法实践。我个人觉得更需要静下心花大块时间琢磨的是前两方面,但是算法实践更容易让大家产生“我确实进步了”的正反馈。如果你参考的是我的旧答案,也就是起手看的是《数据结构与算法分析 in C》。那么我建议用这两本书《C语言程序设计》和《C和指针》再去复习下C语言,之后去LeetCode上找相关题用C/C++去做。或者转头去看《算法第四版》,然后去独立完成上文提到的公开课的编程作业和书后习题。(受限于当时所学,这部分于16年删掉重写)

好了,总结起来就是对于每一个知识点,我们用学理论可视化编程实践相结合的方式一个知识点一步地踏实前进但是到这里我们真的就只是入门。所以我在这之后就愉快的重新认真地撸《算法导论》去了。可以参见我另外一个回答:你是如何坚持读完《算法导论》这本书的? - 孟祥丰的回答。撸完如果觉得不够可以继续撸其它一些算法书籍,详情参见大神文章:我的算法学习之路

虽然我还是觉得自己很渣很菜,但想想没有昨天那么渣了,就会很开心。
推荐神器,我已经帮助不下5个文科生转行CS学数据结构了,绝对的深入浅出,谁用谁知道:

VisuAlgo - visualising data structures and algorithms through animation