大三/研二找实习、冲秋招,大厂面试必问数据结构,这也是我的一大亮点,数据结构算是我一大杀手锏,当年线下面试的时候,可是被面试官要求手写红黑树,至今依然记得。
数据结构 + 算法,是校招面试必问的,是能进互联网大厂的必要条件,大一、大二在学习的时候,一定要有这个意识(算法单独会出文章)。
一、如何学习数据结构
对于数据结构的学习,一定要搞清楚每一种结构,只懂原理远远不够,需要敲代码去实现,这才是真正的掌握。
数据结构的学习不仅仅是原理,是代码实现,这仅仅是基础要求,更深层次的是打破知识体系之间的独立性、隔离性,以及在面对复杂问题的时候,你是怎么看待不同数据结构的,这就要求你知其然,更要知其所以然,这才是融会贯通、学以致用!
怎么理解我上面说的打破知识体系的独立性、隔离性?如果你不懂数据在真实内存中的存储方式,不懂内存是一维、线性、不懂虚拟内存、真实物理空间,这些操作系统中的相关知识,你学到的只是死记硬背,应付面试而已,无法真正掌握数据结构的精髓;当你碰到实际工程上面的问题时,你就会傻眼,明明学过的知识,却不会迁移到实际的业务中,这就是在学习的时候缺乏思考,多问自己几个为什么?只有真正掌握了本质、原理,你才能灵活运用、得心应手。
如果代码实现有困难,那就看我的代码,把它吃透吸收下来,对于每一种数据结构的实现,我都会把代码放到这里,充分体现面向对象的思想,面向提供工具的思想。
真的不用太纠结是什么语言实现的,要聚焦关心其原理,每种数据结构的特点,什么场景下使用合适?能解决什么问题?
可能我上面说到的这段话,你暂时无法理解,而真正实际面临的复杂问题,都是通过更为复杂的数据结构进行解决的,随着不断的深入学习,我相信你对于数据结构的认知会越来越不一样(越复杂的数据结构,其应用面是越广的,因为能真正解决工程上面的问题,图是比较复杂的数据结构:应用在知识图谱、图索引等场景中)。
二、数据结构的构成
软件 = 数据结构 + 算法 + 软件环境数据结构 = 数据 + 结构 + 算子(运算、函数)
1、数据结构三要素
- 数据;
- 数据结构:数据间关系;指的是线性关系和非线性关系;或者说一对一关系,一多关系,多多关系;
- 数据结构上的运算:在其基础上进行的一系列相关运算。
2、逻辑结构 + 物理结构逻辑结构: 存在于思想中,是看不见摸不着;分为线性逻辑结构与非线性逻辑结构;
物理结构: 内存存储的真实结构;分为物理线性结构(数组)和物理非线性结构(链表);
3、核心数据结构
线性结构:线性表、堆栈、队列、数组、矩阵、串;非线性结构:链表、树、二叉树、图(了解);
三、数据结构学习思维
学习思维:
-
数据结构与具体程序设计语言无关!(Python、C++、Java、Go 等等都可以)
-
提供给他人进行软件研发的工具。
-
用面向对象的思想来进行具体的开发。
四、数据结构学习路线
1、数据结构学习大纲
2、数据结构视频
3、数据结构书籍
4、数据结构精华笔记
大学时期数据结构学习笔记,原文在公众号历史文章,为了方便共享学习,制作了此 pdf(文末有获取方式)。
- 数据结构历史文章:
以上历史文章制作了上面 pdf 文档,其中不仅仅是学习数据结构的实现,更重要的是培养数据结构的思维、以及举一反三的能力,希望通读此 pdf 可以帮助到你。
5、刷题 + 面经
推荐牛客网。
个人在大学期间,刷题和面经都是在牛客网上面进行的,以及后续找实习、冲秋招等,在校生值得拥有!
6、视频 + pdf 资料
从认识数据结构组成,到如何学习数据结构,再到数据结构学习思维,最后才是数据结构学习路线,加持我的个人数据结构笔记 buffer,我相信一定可以拿下它!
学习编程的核心思想,三步走战略:看视频 + 敲代码 + 记/做/读(记笔记、做项目、读经典书,在学习编程的不同阶段,这三个侧重点不一样),实战才是检验编程能力的唯一标准。