本人是菜鸟,上了一学期的网课,感觉数据结构一点都没学到,不知道是不是自己没掌握学习技巧,还是逻辑不行。学习数据结构的时候看的很乱,然后很容易厌烦。有时是理论懂了,但是代码又不会实现。既然选了这专业也不想放弃。马上下学期就要进入完全学演算法了,希望大佬能给我指点迷津 ?


新浪微博搜陈越姥姥的《数据结构自学攻略》


以下内容信息量比较大,建议收藏!

首先要知道 数据结构和演算法 都有哪些内容, 这张图应该对你有帮助。毕竟以后也是为了面试做准备。

当开始入门的时候,要循序渐进的来,我这里可以建议一个学习顺序。

可以按照如下顺序来循序渐进的学习。

数据结构方面:

  1. 数组和链表, 这是最基础数据结构,数组和链表在内存中的分配方式,应用场景,已经基本代码一定要熟练。
  2. 哈希表, 什么是符号表,如何做映射也就是哈希函数,冲突了怎么办就要看哈希碰撞。 然后在了解set 和 map这两种数据结构
  3. 字元串,字元串其实就是数组,但是字元串也有很多自己的特性,例如C语言中字元串是以『 』结尾的。同时字元串查找方面有一个经典演算法KMP(当然这个比较难,可以放在后面在看)
  4. 栈与队列,一个 先进先出,一个先进后出,不要仅仅知道概念,要知道有什么用,栈在括弧匹配已经模拟递归方面很有大优势,队列在图中的广度优先搜索中有所应用。可以用栈实现队列,也可以用队列实现栈。更进一步还有单调队列,优先顺序队列。
  5. 树,其实的二叉树在计算机科学中应用非常广泛, 了解平衡二叉树,完全二叉树等等都有哪些特性,前中后序遍历 要熟练写出来,此时你就会接触到两个演算法叫做递归和回溯。

演算法方面:

  1. 排序演算法,十大排序演算法,都要了解,各自优缺点,插入,冒泡,快速排序一定要可以熟练到直接写出来 做到bugfree。
  2. 贪心演算法,这个是一种思想,通过目前最优值推断出整体最优质
  3. 动态规划,最经典是背包问题,背包里就有九种背包问题,主要掌握前三种就可以了。动态规划是演算法中的明珠,最能体现演算法思想,一定要好好学,后面无论在面试还是找工作都会受益的。
  4. 图论,深度优先和广度优先遍历,一定要熟练。Dijkstra,spfa,贝尔曼福德,最小生成树等这些演算法要知道其思想

复杂数据结构

这些高级数据结构,可以最后再看,也是一定要会的。 不要求上来就手撕代码,但要知道原理已经应用

  1. 并查集
  2. 线段树
  3. 树状数组
  4. 字典树
  5. B、B+、B-树

相信很多小伙伴刷题的时候面对力扣上近两千道题目,感觉无从下手,我花费半年时间整理了Github项目:

leetcode刷题攻略?

github.com

里面有200道经典演算法题目刷题顺序、配有60w字的详细图解,常用演算法模板总结,以及难点视频讲解,按照list一道一道刷就可以了!star支持一波吧!

可以在B站上关注我的视频

哔哩哔哩 ( ゜- ゜)つロ 干杯~ Bilibili?

space.bilibili.com

另外我已经将「代码随想录」的演算法文章按照由浅入深的刷题顺序编排起来,整理成册,陆续整理出PDF版本了

先上图:

赶紧去下载看看,你会发现相见恨晚!

BAT程序员的演算法学习手册开放下载!?

mp.weixin.qq.com

如果感觉对你有帮助,要不吝啬给个赞吧!

更多干货,关注 @代码随想录


https://visualgo.net/zh?

visualgo.net

自学起家的,刚开始学数据结构时我也很迷茫。首先大致弄懂实现原理。实现原理懂但写不出代码,说明还没有适应写代码。这个阶段还是要多练习。

我已开始也这样,后来我就抄,背,默写代码。链表的isEmpty简单吧,一行背下来;接著是查找,几行背下来;最后插入,抄一遍,仔细看一遍,研究一次,最后背下来。

最后慢慢就手熟了。


leetcode,你值得拥有


看一些书吧,《趣学演算法》《剑指offer》《大话数据结构》……或者刷leetcode,实在不行跟著我公众号学也行


不要纠结与代码的编写。

各种数据结构(链表、二叉树等):先把各种数据结构以及插入、删除等各种操作搞懂。要能够自己画图模拟出各种结构的删除、插入、删除等一些操作。

各种演算法:同链表、二叉树等的学习,多画图、模拟排序的过程。

最后写代码是照著图写就行了。如果跑错了,一定要慢慢调试。

最后如果想提高写数据结构代码的逼格,看看stl源码。


推荐阅读:
相关文章