经历找工作前的数据结构的学习,在加上最近疫情期间在家的复习,才发现之前学的数据结构真的没有学到点子上,导致觉得算法难。我这里把数据结构作为算法的基础,很多其实都是把数据结构和算法放在一起来说的,我觉得算法和数据结构的学习方向是不同的,所以感觉分开来看比较好,后面在来说算法的学习,这篇文章先来谈一谈数据结构的学习。
这里补充一点,作为非计算机专业的学生,其实转到软件岗位需要学什么,就是听了听师兄说该学什么,他们都说学数据结构,但是只学数据结构完全不够,数据结构只是算法的基础,一定还要去学习算法的设计思想,下一篇如何学习算法在详细来总结。(不知道大家有没有被误导过)如果只是学完数据结构就去刷题,当时真的把我难到想放弃。
数据结构是什么?
数据结构我的理解其实就是对于数据的一个组织形式,通过这种组织形式,让你能够按照你的需求来方便的获取想要获得的数据。比如说我想在线性时间查询一个元素是否存在,那么就可以使用哈希表;每一次都从一个集合的数据中取出集合中的最小值元素,就可以使用优先队列(堆)。这些就是前人在编程实现各种需求的时候,总结出来的一些方便使用的数据组织形式,能够满足你的一定需求。其实这也是面试笔试中各种题目的考查点,很大一部分题目其实就是数据处理或者字符处理之上赋予数据一定的实际意义。比如LeetCode 239题滑动窗口最大值,其实就是数组中一段中的最大值。如果你能将表面的实际意义去掉,可以看到就是一个双端队列的数据结构。所以说数据结构可以看作是算法的基础,任何算法其实就是对数据处理,这就是需要借助数据结构来实现。所以数据结构学好是非常重要的,那么该学什么呢?
数据结构学什么?
我觉得数据结构学的是各个数据结构的特点,一定要熟记于心,能够灵活运用,一看到这个题目的需求,比如LeetCode 第1题两数之和,使用暴力法就是两次遍历数组,那么如何快速查询数组中是否出现过target-nums[i],就是使用哈希表记录i之前出现的数字,然后就可以快速查询了。所以数据结构的学习重点是学习各个数据结构的特点和缺点,在需要使用的时候能够灵活选择。我觉得只要掌握这些数据结构的特点,然后在题目中能够准确选择相应的数据结构,就能比较轻松的解决问题。在比如对于去年秋招腾讯的笔试题LeetCode 394字符串解码,其实就是需要与之前出现的括号匹配,这种对于需要访问之前出现数据的情况,就可以考虑栈来实现了,对于这些数据结构的具体如何实现,我觉得其实可以不必要完全会实现,因为大家一般都是使用高级语言,c++、java、python都有相应的库函数,学会如何调用就可以。
数据结构学习路线
我的数据结构学习就是看了一门mooc和几本书,首先对于数据结构的入门,我觉得看浙江大学的mooc非常好,讲解的比较基础,而且后面有相应数据结构的习题,对于掌握这种数据结构非常有利。这门mooc的数据结构都是C语言底层实现的,你可以自己编写每种数据结构如何实现的,加深理解。
https://www.icourse163.org/course/ZJU-93001
书籍的话,推荐大话数据结构
数据结构与算法分析,个人感觉前面一部分还不错,后面算法设计思想部分不建议看,有C语言和java还有python版本可以按照自己需要来看。
(图片来源互联网,侵权删)
在掌握这些基础数据结构的特点,能够灵活应用之后,就可以更进一步的学习算法了,将两个部分结合在一起,对于面试笔试中的算法题目就会得心应手。
全部评论
(1) 回帖