学习数据结构方法及资源分享

举报
CodeAllen 发表于 2021/10/29 23:42:43 2021/10/29
【摘要】 我自己本科是电子信息工程,是没有学习过数据结构与算法的,所以也是自己从小白一路走过来,这个过程走过很多弯路,所以这也是我自己学习的经验之谈,要是观点不同非常正常。 先大概说下目录(几个想说的点): 为...

我自己本科是电子信息工程,是没有学习过数据结构与算法的,所以也是自己从小白一路走过来,这个过程走过很多弯路,所以这也是我自己学习的经验之谈,要是观点不同非常正常。

先大概说下目录(几个想说的点):

  1. 为什么要学数据结构?
  2. 数据结构要学什么?
  3. 怎么学数据结构?
  4. 资源推荐

为什么要学数据结构?

首先要明确的一点就是数据结构不是具体的语言,主要是一种思维,很多同学私聊问的最多就是用什么语言学习数据结构。其实原则上什么语言都可以,当然这就引出了需要学习哪种语言的问题,这个之后再单说。

因此也就引出了学习数据结构的目的

第一个也是最重要的就是提升逻辑思维能力

掌握了数据结构与算法,我们看待问题的深度、解决问题的角度会大有不同,对于个人逻辑思维的提升,也是质的飞跃。

具体来讲,对于同一个问题,数据结构往往会教给我们不只一种解决思路。举个例子,假设我们需要从众多数据中查找出符合要求的元素,多数人就只能借助数组这种简单的存储结构来实现,而通过学习数据结构我们会知道,解决此类问题既可以通过构建二叉排序树、平衡二叉树、甚至红黑树、B+/B- 树来解决,还可以借助哈希表解决。

无论是 Java、Python、C++、PHP 还是其他编程语言,无时无刻不在更新迭代,而数据结构却永远不会过时,其包含的存储数据的思想,已经近乎将所有可能的情况都囊括其中,能解决 99% 的实际场景中有关数据存储的问题。

第二个作用是评判软件效率的工具

这个其实在任何一门数据结构教程的开头都会提交,表示方法有时间复杂度和空间复杂度,前者用的更加普遍,只有学习数据结构才能在项目设计时心里有数并选择合适的存储结构,不然可能做了半天最后发现时间过长或者占用空间太大就麻烦了,而且但凡接触过一些算法的就知道,不同的算法效率可能会差出一个甚至两个数量级,这对项目的价值是非常大的。

第三个也是比较现实的一个例子算法也是程序员能力的一个体现

不管是校招还是社招,现在手撸算法题基本都是必备的环节,尤其是一线大厂基本都是一个比着一个难,这个时候要是能力比较强自然也就收获更多的offer,有很好的收入。目前的应届毕业生收入绝对超出你的想象。

数据结构要学什么?

数据结构大致包含以下几种存储结构:

线性表,还可细分为顺序表、链表、栈和队列;

树结构,包括普通树,二叉树,线索二叉树等;

图存储结构;

线性表

线性表结构存储的数据往往是可以依次排列的,就像小朋友手拉手,每位学生的前面和后面都仅有一个小朋友和他拉手,具备这种“一对一”关系的数据就可以使用线性表来存储。

线性表并不是一种具体的存储结构,它包含顺序存储结构和链式存储结构,是顺序表和链表的统称。

图片

顺序表,简单地理解,就是常用的数组,只是换了个名字而已,例如使用顺序表存储 {1,3,5,7,9}

由于顺序表结构的底层实现借助的就是数组,因此对于初学者来说,可以把顺序表完全等价为数组,但实则不是这样。数据结构是研究数据存储方式的一门学科,它囊括的都是各种存储结构,而数组只是各种编程语言中的基本数据类型,并不属于数据结构的范畴。

链表

我们知道,使用顺序表(底层实现靠数组)时,需要提前申请一定大小的存储空间,这块存储空间的物理地址是连续的。

链表则完全不同,使用链表存储数据时,是随用随申请,因此数据的存储位置是相互分离的,换句话说,数据的存储位置是随机的。

图片

栈和队列隶属于线性表,是特殊的线性表,因为它们对线性表中元素的进出做了明确的要求。

栈中的元素只能从线性表的一端进出(另一端封死),且要遵循“先入后出”的原则,即先进栈的元素后出栈。

树存储结构

树存储结构适合存储具有“一对多”关系的数据

**图片**

图存储结构

图存储结构适合存储具有“多对多”关系的数据。

图片

怎么学数据结构?

学习数据结构和算法有一个很重要的前提,就是至少熟练掌握一门编程语言。

有很多同学其实都是因为语言基础不扎实导致半路放弃的,所以学数据结构最好专注于一门语言,哪个语言好见仁见智,需要结合自己之后的规划和学习意愿而选择,我比较推荐的是用C语言学习数据结构,面试需要的算法题选择一门面向对象语言(C语言也是可以的,只是太多轮子需要重新造,面试的性价比较低,但是学习的时候可以深入的了解软件实现)

学习数据结构和算法,实践是非常重要的,如果仅仅是空有理论而不实践,反复学多少遍都没用。

这个实践不光是要多敲代码,实现代码,还有一个就是多去理解数据结构的存储方式,这个可以自己动手去画一下,当然很多书籍也都是提供了对应的图可以参考。画的过程中思考如何用代码实现这个机构。

数据结构相比较与其他几门基础课算是比较难的一门,确实需要一点死磕的精神,不然很容易放弃,我写这篇文章的目的也就是想给各位同学提前打好预防针,做到心中有数,

资源推荐

对于编程学习 书 + 视频是黄金搭档,最后在结合实践就可以比较好达到学习目的。

下面就推荐一些书和教程,当然时代在发展,肯定是会有更好的资料面世,这个需要自己不断去探索寻找学习。

书籍推荐:

数据结构与算法分析

这是我开始学习数据结构的主演参考书,使用的是C语言

清华严奶奶那本就不推荐了,当然要是考研的同学还是需要看下的,毕竟是指定书籍

图片

算法

这本也是很好的一本参考书,使用的语言实Java语言,借着Java的大面积普及这本书使用的人也非常多,我后期学习C++的时候看的这本,具体代码自己改了下,还是那句话选择自己需要的语言就行

图片

视频推荐:

最近搬运了两门课程到B站,还有几门不错的可能后边找时间更新下,着急的同学也可以私聊找我要下,但是教程在精不在多,学习在于实践不要贪多,这也是最容易犯的一个问题

【小甲鱼】数据结构和算法C语言

https://www.bilibili.com/video/BV1k54y1h7Ss

国嵌唐老师主讲【数据结构与算法C语言】(非常犀利)

https://www.bilibili.com/video/BV1eK4y1J7zh

- END -
2021年3月1日 晚

欢迎在更多平台与我联系,专注技术与发展:

我的知乎:CodeAllen (上千条回答及一对一咨询)

我的B站:CodeAllen (更多视频分享)

文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。

原文链接:allen5g.blog.csdn.net/article/details/114271541

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。