学 [数据结构、算法] 的资源推荐

学 [数据结构、算法] 的资源推荐

0、前言:

我在初学编程以及学习数据结构的时候,一直有个想问却害怕问出来被嫌弃的问题,那就是“数据结构学了有啥用?算法和数据结构又是啥关系”,那时候懵懵懂懂的,好像明白却又具体回答不上来,说不出所以然。

现在明白了。

有这么一句话说“程序=数据结构+算法”,也有人说“如果把编程比作做菜,那么数据结构就好比食材(菜),算法就好比厨艺(做菜的技巧)”。

当然这是笼统的说法,不过也稍微懂得了数据结构和算法的重要性了。

其实,数据结构是数据间的有机关系,而算法是对数据的操作步骤;两者不可分开来谈,不能脱离算法来讨论数据结构,也不能脱离数据结构研究算法。

在网上看到这样一段话:

数据结构并不是来教你怎样编程的,同样编程语言的精练也不在数据结构的管辖范围之内,那是教你学习一门语言的老师的事情,他肯定不想因为数据结构而失业。数据结构是教你如何在现有程序的基础上把它变得更优(运算更快,占用资源更少),它改变的是程序的存储运算结构而不是程序语言本身。

如果把程序看成一辆汽车,那么程序语言就构成了这辆车的车身和轮胎。而算法则是这辆车的核心——发动机。这辆车跑得是快是慢,关键就在于发动机的好坏(当然轮胎太烂了也不行),而数据结构就是用来改造发动机的。

可以这么说,数据结构并不是一门语言,它是一种思想,一种方法,一种思维方式。它并不受语言的限制,你完全可以在gave 中轻而易举地实现一个用C语言给出的算法。

或许你在初入职场的时候并不会涉及到需要使用到数据结构的地方,也因而觉得数据结构貌似没用,但这和“农民工也能盖大楼,干嘛还学建筑呢?” 是一个道理,应该都懂。

前面说了超长的废话,其实我是想介绍一些数据结构的学习资源,主要针对编程新手,希望可以解决新手们“如何学习数据结构”的困惑,若对你有所帮助,那真是极好的。

1、一定要看书籍:

(ps.我不是推荐书,而是说要看书,要有一个系统的理论基础,至于看什么书可以自己选择~)

大学的《数据结构》教材,就是一本不错的入门书籍,可以好好看看,毕竟还有老师讲课呢。

貌似一般的通用教材是 严蔚敏 版的 《数据结构》

还有一本经典书籍:《数据结构与算法分析》,很多人推荐阅读,如果有基础的话,可以当做工具书使用,哪里不懂看哪里。

如果你想深入研究算法的话,可以看看《算法导论》,反正据说看完的都很牛。

其实不一定要是以上书籍啦,只是想说一定要有系统的理论知识,知晓其原理。

2、善用在线课程:

除了书籍之外,也可以选择在线学习的方式,比如上慕课、网易云课堂、实验楼等学习网站进行学习,上面一般都会有数据结构这种基础课程,而且质量都还可以。如果你喜欢视频的方式,可以选择慕课或者网易,如果和我一样喜欢动手的方式,可以选择实验楼。

推荐课程: C/C++ - 数据结构

介绍的还算详细,关键是可以随时动手跟着做,学习效率很高。

3、借助可视化工具:

在学习数据结构之初,往往会觉得知识比较抽象,因此无法对其有个清晰的认知,这个时候就需要 visualgo 这个神器啦!!看着动态视频,一下子就明白原理了。推荐推荐。

visualgo 是一款可视化学习算法的工具,从简单的排序算法到复杂的图形数据结构和算法都有

visualgo 网址 : visualgo.net/

4、多动手实践:

在学习算法的时候,一定要花时间来分析其算法原理,基础知识是少不了的,因此前面介绍的书籍也好,在线课程也罢,还有可视化工具,都是为了更好的掌握算法原理。有了基础之后,接下来就要多动手实践了,只有这样才能知道自己哪里学习的不好,需要加强。

可以上LeetCode(一个美国的在线编程网站,上面主要收集了各大IT公司的笔试面试题)或者 lintcode(编程面试题 在线训练平台,和LeetCode 类似,不过有中文,但是没讨论区) 上刷刷题,或者去类似实验楼一样的拥有在线开发环境的网站学习,真的,只有动手了,你才知道动手的乐趣和收获!


如果你喜欢这种在线刷题的方式来实践算法,那么知乎上的这个问题绝对可以帮助到你:


以上的内容应该可以帮助你学好数据结构以及实践了,下面整理一些我看到的算法相关文章,可以参考阅读;

5、分享一些文章材料:

下面是我平时看到的一些关于算法的文章,还是蛮有用的;



嗯,觉得能看这个问题的或许会对以下的资源感兴趣,因此也分享出来;


以上就是我对于学习数据结构和算法的一些小建议和资源推荐,希望可以帮助到你~

编辑于 2016-10-26

文章被以下专栏收录