数据结构是编程人的痛点,今天我来教大家如何自学入门!

很多小伙伴向我询问应该如何自学数据结构,或者怎么才能学好数据结构和算法?这次结合我的个人经验,给大家介绍一些学习数据结构和算法的方法,帮大家规避一些学习数据结构和算法过程中可能会踩的坑。

首先我认为,学习数据结构和算法有一个很重要的前提,就是至少初步掌握一门编程语言。学习数据结构和算法,实践是非常重要的,如果仅仅是空有理论而不实践,反复学多少遍都没用。

因为无论是数据结构还是算法,它教会我们的是解决问题的思想,并不挂靠某一门具体的编程语言。换句话说,在掌握任何一门编程语言的基础上,都可以学习数据结构和算法。

其次对于初学者来说,好的学习资源是非常重要的。要知道,学习数据结构需要读者有一定的空间想象能力,所以强烈建议家人们在看文字资料的同时,再找一套相应的视频资料,两者结合来学习,往往会事半功倍。

那么,有哪些不错的学习资源呢?我个人推荐严蔚敏老师的《数据结构(C语言版)》以及她录制的数据结构视频资料。

另外,市面上还有很多不错的学习资料,例如《大话数据结构》、《数据结构与算法分析》等,同时慕课(mooc)上也有很多讲解数据结构和算法的视频资料,这里不再一一举例。

除了熟练精通一门编程语言、有一套不错的学习资料之外,最重要的是找到一个好的学习方法。其实数据结构和算法并不难,之所以有小伙伴认为它很难,是因为你的学习方法不对。

————————————————

在这里,我把自己的学习方法推荐给大家,可以总结为 6 个字:多动笔、多动手。

所谓“多动笔”,在学习数据结构和算法的过程中,要边学习边画图。因为,对于数据结构中的存储结构来说,尤其是树结构和图结构,存储结构确实比较复杂,仅靠空间想象难免会有纰漏,而通过亲手画图往往能避免很多“坑”。

以学习链表(后续章节会做详细讲解)为例,如果我们想象不到它是怎样存储数据,就应该尝试动手将它画出来,如下图所示:

画链表

上图是用画图工具制作的,读者在实际画图时,只需要做到心中有数即可。

由此,我们就画了一个存有 {1,2,3,4} 数据的链表。

不仅如此,假设在上图的基础上想删除存储元素 3 的结点,也可以先通过画图来实现:

删除某个结点

如上图所示,整个画图的过程,也是我们思考如何通过程序实现删除指定节点的过程:

        Ⅰ、为了删除存有元素 3 的结点,先要找到它的前驱结点,也就是结点 2,并用一个指针 p 来标记;

        Ⅱ、借助指针 p,可以顺利找到结点 3,因为它最终要被摘除,考虑到该结点占用的空间要手动释放,因此还要用一个指针 q 来标记它;

        Ⅲ、借助指针 p 和 q(也就是图中的第 3 步),就可以成功将目标结点摘下来;

        Ⅳ、最后借助指针 q,可以释放被删除节点所占用的存储空间。

以上就是为了删除存储元素 3 的结点,整个画图的流程。

再次强调,画图的过程是思考如何用程序实现的过程,并不是随意勾画。

除此之外,在学习某些算法时,也可以借助画图来加深自己的理解。甚至在阅读它人实现的代码时,可以边阅读代码边画图,这样可以更快理清代码的实现逻辑。

在通过“多动手”实现理解存储结构和实现逻辑的基础上,初学者还要“多动手”编写实现代码。注意,对于某一种存储结构或者算法,没有 3 遍以上自己独立的实现过程,是很难做到融会贯通的。

另外,很多初学者都存在“当时搞清楚了,过段时间又忘了”的情况。

其原因大致有 2 个,一个是当时学的时候就没有彻底搞懂,或者处于“似懂非懂”的状态;另一个原因就是长时间没有再接触过它,所以淡忘了。其中如果是第一种原因导致的,那只能从头再学;对于第二种情况,家人们不需要过度懊恼,只要我们再回顾一遍,通常是可以快速回忆起来的。

总之,数据结构确实是一门比较难理解的学科,而且学习过程没有任何捷径可走。这意味着,想要学好数据结构,除了找一套适合自己的学习资料和学习方法外,更要有一种“死磕”的精神,有句话说的很好,“不逼自己一把,永远不知道自己有多大的潜力”。

不管你是转行也好,初学也罢,进阶也可,如果你想学编程,进阶程序员~

【值得关注】我的 编程学习交流俱乐部 【点击进入】

C语言入门资料:

C语言必读书籍:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值