数据结构与算法学习指南,可能是最适合新手的了!

文章目录

    • 先来聊聊学习数据结构与算法
      • 数据结构与算法,听起来就难得不要不要的
    • 数据结构与算法,到底该怎么学?
    • 通用性建议---如何学习编程知识?
      • 1、你需要的不是一个参考
      • 2、不要钻牛角尖
      • 3、一定要多交流
      • 4、你得多动手(不是让你找人打架)
    • 那么针对数据结构与算法该怎么学习?
    • 我们需要学习哪些知识点?(附有思维导图)
      • 基础中的基础
        • 复杂度
        • 基础的数据结构
        • 那些需要了解的算法
    • 来个总结吧
    • 感谢阅读

 

先来聊聊学习数据结构与算法

不知道你们是肿么样,反正我大学的时候数据结构与算法那是惨的一批,不怕告诉你,当初数据结构60分刚刚及格,至于为啥刚刚60分,那我心里还不跟明镜似的,唉,当初上这个课,那跟听天书似的,讲的是个啥,完全搞不懂啊,你见我当时的书:

我就不告诉你,这是我趴上面睡觉压的,怪尴尬的,反正我这块差的一批,自己之前虽然一直在自学,但是这块还真没有咋下功夫,后来去面试的时候,凡是这块的问题,我就都忽略了,完全不会啊,我也很无奈啊

为啥会这样?反正吧,有一半的自身因素,也有一半的环境因素,不过这都过去了了,好汉不提当年衰啊,不过这次我可是铁了心,要搞定数据结构与算法了,我知道,肯定有很多和我一样的,上大学的时候没有好好学,导致现在自己在这块是个大大的短板,没事没事,接下来的日子,咱们一块来学习数据结构与算法,我会从零到一的去学习,去写文章,去与大家交流分享……

数据结构与算法,听起来就难得不要不要的

数据结构与算法真的是那种听起来就让人闻风丧胆的吗,为啥大家都觉得它难嘞?我觉得吧,有一部分原因是大家大学的时候都学过,可是当时真的听不懂,所以就形成了一种思维定式,就觉得这玩意难,后来嘞,需要学习的知识越来越多,而我们人呐,往往会优先选择那些做起来简单的,因此,很大一部分人在后来的学习中就把数据结构与算法给搁置了……

还有就是,我们在后来的工作与学习中可能也有好多次去学习数据结构与算法,但是当自己真正的去接触这玩意的时候,我去,还真的有难度啊,怪不得很多人都说数据结构与算法难,看来是真的……

然后嘞,我们其实实际的工作中,一般化的,用到数据结构与算法的时候真的蛮少的,学习的性价比不高啊,也就面试的时候有时候会考考,那就临时抱佛脚呗,也能搞定面试……

那么数据结构与算法,到底难吗?说实话,难,因为很抽象,也复杂,再加上我们的思维定式,没有形成系统化的学习与练习,很多人呐,这块都是短板,尤其新手这块,知道这块重要,但是完全弄不着头脑啊……

数据结构与算法,到底该怎么学?

可能有人说了,我也知道啊,数据结构与算法很重要,我也想学习啊,但是就是觉得无从下手啊,咋办,我也很彷徨啊

真实真实,太真实了,也太扎心了

别说你,其实很多人刚开始不都是这样吗?那接下来我就告诉你学习他们的秘籍,首先嘞,我需要你先记住这句话,这也是一个学习秘籍啊,那即是:

知识在于积累,学习需要耐心!

这句话说的贼好!其实很多人都是这样的,我们一开始学习一个知识点,都会感到无从下手,不知道该怎么去学,俗话说,万事开头难,这话是真的,大部分人真的就是开始还没有就结束了。

很多人的学习数据结构与算法就是这样,还没开始就结束了……

接下来我就说说关于学习一些编程知识的法宝秘籍,不要外传哦,对了我以下要说的其实不是针对数据结构与算法,对于学习其他知识也是很有参考意义的。

通用性建议—如何学习编程知识?

1、你需要的不是一个参考

我们有时候学习一个知识点,一定会去找一些学习资源,这是一个输入的过程,这个过程一定要是尽量的多而全,就比如我们学习数据结构中的链表,我们学习的话,可以多看看基本相关书籍上对这个知识点的介绍,然后再去网上看看别人写的博客以及别人学习的心得,有了这些,你就要自己去思考,甚至去实践,把这些知识点吸收内化,然后用自己的话表达出来,这可以是笔记,更可以是博客,而我建议是你把它写成博客,学习一个知识,其实就是这样!

2、不要钻牛角尖

这个啥意思嘞?就是有的时候啊,我们学习一定会碰到自己不会的,而且这个问题自己一时半会还解决不了,如果这要是在工作中的话,你最好赶快找人求助,因为这是你的工作任务,不能完不成,更不能因此而耽误你的整体工作进度,但是,如果是我们私底下学习的话,有的时候遇到实在理解不了,搞不定的,我们真的没有必要非得当下一定要把它搞懂,比如有些人学习递归,就是看不懂,不理解,还非要跟自己较劲,把自己整的垂头丧气的,大可不必如此,放下它,学学其他的,甚至你可以打把游戏,说不定下次再看,就恍然大悟了,你还别不信,有的时候真的是这样。

3、一定要多交流

其实吧,说起这个很尴尬,因为我有体会啊,交流其实蛮重要的,但是,真正的交流其实很少,别说现在有各种各样的群,但是你如果去问问题的话,大概率没人鸟你,所以所谓的技术交流群在我看来很多都是扯淡,然并卵的存在,这个一直是个问题,其实吧,这也是我的短板,这块我一直在想办法,也一直在试错,别担心,有成果我一定会第一时间告诉你们,在此之前,你们依然可以去水各种群,另外还一个行之有效的方法,找人私聊请教!

4、你得多动手(不是让你找人打架)

这点我觉得吧,很多人都知道,但是做的人真心不多,包括我,我这块做的就不好,有的时候觉得自己那么渣也是有原因的,编程这玩意,真的得多动手实践,说白了,你得多敲代码,看是一回事,懂了又是一回事,但是,只有你真正的自己能够动手敲代码搞出来,那才叫没事,之前很多人给我说,为啥我看书或者看视频当时自己看懂了啊,可是敲代码的时候就一脸懵逼,别说你,有的时候我也是一脸懵啊,为啥,还是你敲的少,第一次敲不出来,抄总可以吧,抄的多了,你就记住了,再敲……

数据结构与算法的学习更是如此,后期我会带着大家进行大量的实战,其实这块你不用操心,跟着庆哥我就行了,因为我也是要学习的。

再记住一句话:

纸上得来终觉浅,绝知此事要躬行!

没有人可以一蹴而就,付出总归会有回报,越努力与幸运!

以上说的这几点,其实可以运用到你学习的任何知识,我们学习啊,有个很重要的能力,那就是触类旁通,举一反三啊,好好理解我上面说的几个,对你学习数据结构与算法是很有帮助的哦。

接下来我们继续针对数据结构与算法的学习来说说。

那么针对数据结构与算法该怎么学习?

先搞数据结构,再搞定算法

我之前写了好几篇关于数据结构的文章了,一个心得,那就是一定要画图(学习数据结构的饿时候),很多人觉得数据结构难,很大一个原因就是这玩意比较抽象所以学习的时候,自己动手画画图,你要在自己的脑海中把这些数据结构的样子给固定下来,说到哪个数据机构,脑海中要立马想到,这玩意长啥样,这是最基本的一步。

也就是说啊,前期我们开始学习数据结构的时候,自己一定要多动手画画图,这真的有助于你理解。数据结构这块嘞,其实那就要学会那些基本的几个,也就是栈,队列,数组,链表这些,当我们把这些基本的数据结构学的差不多了,这个差不多是咋回事嘞,啥是个差不多嘞,那就是它是个啥你得知道,然后最好自己动手用自己会的语言把它们实现一遍,也就是基本的那些增删改查啥玩意的,然后就是数据结构的进一步学习了,我们就可以进行专题形式的做题,也就是多做一些数据结构相关的题目,这个时候可以去一些刷题网站。

这个时候基本数据结构你都差不多了,那么做题的同时就可以搞算法了,有的人建议算法这块直接刷题就行了,毕竟基本的数据结构都差不多了,但是吧,我觉得你只会数据结构,还不适合直接去刷算法题,最起码你得会一些常见的算法思想,比如递归,枚举和动态规划啥的吧,而且这些还不是那么容易学得懂的知识。

所以啊,我觉得刷题的最佳时机就是你把数据结构和算法的基础知识都给学了,也就是那些基础的,大众熟知的,你该会的都得会啊,然后就可以大量做题刷题,这样你的数据结构与算法能力就会不断提升了。

总结起来就是先搞定数据结构,概念啥的必须会,要有自己的理解,然后自己动手实现一遍,多画图,然后多做题,接着学习一些常见算法,理解其常用算法思想,然后结合数据结构,大量刷题,不断进阶打怪……

到了这里,再给你说点实在话,也许你看了我上面说的,觉得内心信心满满,决定我要开干了,但是,大部分也都是三分热度,然并卵的存在,如果你真的有计划学习数据结构与算法的话,你之前肯定看过不少这块的经验之谈了,可是你又做了多少嘞,正所谓,懂得了很多道理,却依然过不好自己的一生……

不过没关系,你不用费那么大劲,关注庆哥,跟着我一块学习就对了,毕竟,咱们2020的目标,就是搞定数据结构与算法,你只要按时学习我发布的文章,有问题留言交流就ok了,而我,尽量用大白话去给你讲解这些晦涩难懂的知识。

这块估计有些朋友还不了解,我搞了个公众号,主要就是带着大家学习Java,我这个学习很特殊,就是我会和读者们定期制定一个学习目标,然后集中一段时间对这个知识点进行专题形式的学习,就是系统化的把这个知识点学习一遍,而且所有文章我还会整理成PDF供大家下载学习,2020,我们就搞数据结构与算法,很适合新手们,因为我写的文章大家都说特别容易理解!感兴趣的,微信搜索“编码之外”,或者加我微信H653836923,咱们一起交流学习数据结构与算法!

接下来就是重点啦,那就是数据结构与算法,我们该学习哪些东西呢?针对我们这种患有严重技术焦虑的人,学习一个东西之前,一定要有个学习规划,你得知道你每天要搞啥,搞完这个接下来该搞啥,所以对于数据结构与算法这块的学习,我们得明白自己需要学习哪些东西,自己心里先有个普。

我们需要学习哪些知识点?(附有思维导图)

如果我们决定要开始学习数据结构与算法了,除了知道一些基本的学习技巧之外,比如上面我分享的,然后知道一些大概的学习步骤,那具体的我们该学习哪些知识点嘞?这个蛮重要的,经过我的多方收集与咨询,最终确定了如下这些你必知必会的知识点,先来个图吧:


看起来是不是没有多少东西啊,咋一看确实如此,但是实际上啊,有些点我没有展开来讲,不然包含的东西太多了,我怕把你吓跑了,接下来我就简单的做一下介绍:

基础中的基础

复杂度

想必了解过数据结构与算法的,一定听说过时间复杂度和空间复杂度吧,也就是那什么大O表示法,这个可以说是学习数据结构与算法必备的一个知识点,理解它,非常有必要,这是最基础的一步,后面很多算法,我们都要去衡量它

基础的数据结构

这块就是我们最开始进行学习的了,也就是我们必须要掌握的那些个数据结构,主要有:

  1. 数组
  2. 链表
  3. 栈和队列
  4. 哈希表
  5. 字符串

其实吧,这里你一定要重点关注的就是数组和链表,为啥嘞,因为其实很多其他的数据结构,比如栈和队列,哈希表啥的,其底层还是数组和链表,也就是说啊,数组和链表是数据结构中的数据结构。

另外像树和图,展开的内容相对较多,也比较难,这个没事,我们以后慢慢一起学习,争取都给它搞懂,我此前也写了一部分,你们可以先看看,是否能够看得懂,可以给我留言或者直接加我微信,咱们一起交流哦

 

有不懂的记得联系我哦!

那些需要了解的算法

说到算法这块,就有点高深了,最起码很多人都这样觉得啊,不信你看看这些词:

  1. 贪心算法
  2. 分治法
  3. 动态规划
  4. 回溯与递归
  5. 分支限界法
  6. 线性规划网格流

你看看,我都觉得这是本武功秘密啊,各种内功心法,大家都说,数据结构与算法就是每个程序员的内功,我觉得这话一点也不假啊,就冲着名字,也不骗你们啊。

而且啊,这其中每一个展开来都有很多的内容,比如贪心算法中的最优装载问题,还有背包问题和最小生成树等等。

然后还有分治法中的二分搜索技术和一些排序的问题,另外还有动态规划中的0-1背包问题……

反正吧,牵涉到算法,那其实就是默认你已经搞定数据结构了,这时候就是上升到一个思想和整体的应用层面了,我们学习的面也变广了,当然,学习的内容多了,可能也变得更难了……

不过这才有挑战嘛!

来个总结吧

其实我还是想和大家说:

即使懂得了很多道理,但未必过得好自己的一生

啥意思嘞,想必大家一定看多各种学习指南,方法与经验,当时看的时候如获珍宝,但是自己实际上好像啥也没做,其实吧,还是不知道该怎么做,就像我上面说的那些,也许你们看了,觉得有用,有指导意见,一些新手可能会说,我可以跟着这个指南来学习,但是相信我,你撑不过三天,依然觉得迷茫,彷徨,有难度……

你可能会说,那么扎心的吗,现实就是如此啊,不是我扎心,说白了,很多人的自学能力很差,这表现在自己的自控自律与自我规划都不行,这是我们所受的教育决定的……

那你可能要问了,那咋办,我还要学习数据结构与算法嘞,没事啊,我都说了,我会从零到一的写一份适合新手从零开始不断进阶的数据结构与算法的教程,其实说白了,我是与大家一起学习,只不过我写你们看,你们反馈,我们交流,大家一起不断试错,一起进阶,2020,我的目标就是要搞定数据结构与算法!

感兴趣的来哦,可以获取整理好的PDF,方便你们学习!

整理了20本经典数据结构与算法书籍送给你们

话不多说,免费送给你们,私信“资料”免费领取学习资料

《Java学习、面试;文档、视频资源免费获取》

 

你可能感兴趣的:(数据结构,算法)