zoukankan      html  css  js  c++  java
  • 数据结构是编程人的痛点,今天我来教大家如何自学入门!

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

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

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

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

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

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

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

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

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

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

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


    画链表

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

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

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


    删除某个结点

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

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

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

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

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

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

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

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

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

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

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

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


     

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

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

    C语言入门资料:


     

    C语言必读书籍:


     
  • 相关阅读:
    一行代码搞定Dubbo接口调用
    测试周期内测试进度报告规范
    jq 一个强悍的json格式化查看工具
    浅析Docker容器的应用场景
    HDU 4432 Sum of divisors (水题,进制转换)
    HDU 4431 Mahjong (DFS,暴力枚举,剪枝)
    CodeForces 589B Layer Cake (暴力)
    CodeForces 589J Cleaner Robot (DFS,或BFS)
    CodeForces 589I Lottery (暴力,水题)
    CodeForces 589D Boulevard (数学,相遇)
  • 原文地址:https://www.cnblogs.com/huya-edu/p/14849624.html
Copyright © 2011-2022 走看看