作者:解学武
大白话聊数据结构到底是什么(干货满满)
程序员编写的每一个程序,本质上都是对数据进行有效地整合、加工,最终再把处理结果展示给用户。例如,学生信息管理系统是用来管理学生信息的,每一条学生信息都是一个个的数据。
程序运行过程中用到的数据,全部位于计算机的内存中。所有数据在内存中的存储状态,比如是集中存放还是分散存放,需要开发者提前做好规划,而这就属于数据结构的研究范畴。
说白了,数据结构是一门研究如何存储数据的学科。
有读者可能会问,存数据还需要研究吗,少量的数据用变量(对象)存储,大量的数据用数组存储,不就行了吗?too young too simple,答案是否定的,接下来通过一个实例展开讲解。
![道路分布图](/uploads/allimg/240819/2-240Q9112Z01W.gif)
图 1 道路分布图
图 1 是一张道路分布图,记录着 V1、V2、V3 和 V4 之间的道路分布,比如 V1 可以直达 V2 和 V3,V3 可以直达 V4,V4 可以直达 V1。图中的每条路都是单行路,比如 V1 可以直达 V2,但 V2 无法到达 V1。
试想一下,如果编写一个道路管理系统,如何将图 1 中的道路信息存储到内存中呢?首先,要想将图 1 存储到内存中,我们需要存储的内容包括:
将以上两份数据都存储到内存中,就成功的将图 1 存储到了内存里。
如果读者尚未学习数据结构,很可能想不出可行的存储方案。反之如果学过数据结构,这个问题很容易解决,因为数据结构中专门讨论了图 1 这类数据的存储方案,将这类存储方案统称为“图”。
例如,下图是数据结构中的一种存储方案,叫做邻接表,它是图的存储方案之一:
![邻接表存储结构](/uploads/allimg/240819/2-240Q91214204D.gif)
图 2 邻接表存储结构
图 2 中,左侧是一个数组,用于存储 4 个地点;每一行是一个链表,用来存储地点之间的道路信息。如下图所示:
![邻接表存储道路信息](/uploads/allimg/240819/2-240Q912152JW.gif)
图 3 邻接表存储道路信息
数组下标 0 的位置存储的是 V1,后续箭头指向的 2 也是数组下标,由此找到了 V3,说明 V1 能直达 V3;同理,通过后续箭头指向的数组下标 1,说明 V1 能直达 V2。
类似图 3 这种稍复杂的存储方案,除非系统地学习数据结构,否则是不容易想到的。
学习数据结构,就是学习各种数据的存储方案。对于同一份数据,存储方案通常有很多种,选择好的存储方案,后续编码过程中可以更高效地使用内存中的数据,为后续编码提供便利,大幅提高开发效率。
这里给读者分享一张我精心整理的思维导图,图中罗列了数据结构几乎所有的知识点(猛击这里查看超清大图):
![数据结构思维导图](/uploads/allimg/240819/2-240Q9123605Z7.gif)
图 4 数据结构思维导图
声明:当前文章为本站“玩转C语言和数据结构”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
程序运行过程中用到的数据,全部位于计算机的内存中。所有数据在内存中的存储状态,比如是集中存放还是分散存放,需要开发者提前做好规划,而这就属于数据结构的研究范畴。
说白了,数据结构是一门研究如何存储数据的学科。
有读者可能会问,存数据还需要研究吗,少量的数据用变量(对象)存储,大量的数据用数组存储,不就行了吗?too young too simple,答案是否定的,接下来通过一个实例展开讲解。
![道路分布图](/uploads/allimg/240819/2-240Q9112Z01W.gif)
图 1 道路分布图
图 1 是一张道路分布图,记录着 V1、V2、V3 和 V4 之间的道路分布,比如 V1 可以直达 V2 和 V3,V3 可以直达 V4,V4 可以直达 V1。图中的每条路都是单行路,比如 V1 可以直达 V2,但 V2 无法到达 V1。
试想一下,如果编写一个道路管理系统,如何将图 1 中的道路信息存储到内存中呢?首先,要想将图 1 存储到内存中,我们需要存储的内容包括:
- 4 个地点:V1、V2、V3 和 V4;
- 道路信息:V1->V2、V1->V3、V3->V4、V4->V1。
将以上两份数据都存储到内存中,就成功的将图 1 存储到了内存里。
如果读者尚未学习数据结构,很可能想不出可行的存储方案。反之如果学过数据结构,这个问题很容易解决,因为数据结构中专门讨论了图 1 这类数据的存储方案,将这类存储方案统称为“图”。
例如,下图是数据结构中的一种存储方案,叫做邻接表,它是图的存储方案之一:
![邻接表存储结构](/uploads/allimg/240819/2-240Q91214204D.gif)
图 2 邻接表存储结构
图 2 中,左侧是一个数组,用于存储 4 个地点;每一行是一个链表,用来存储地点之间的道路信息。如下图所示:
![邻接表存储道路信息](/uploads/allimg/240819/2-240Q912152JW.gif)
图 3 邻接表存储道路信息
数组下标 0 的位置存储的是 V1,后续箭头指向的 2 也是数组下标,由此找到了 V3,说明 V1 能直达 V3;同理,通过后续箭头指向的数组下标 1,说明 V1 能直达 V2。
类似图 3 这种稍复杂的存储方案,除非系统地学习数据结构,否则是不容易想到的。
学习数据结构,就是学习各种数据的存储方案。对于同一份数据,存储方案通常有很多种,选择好的存储方案,后续编码过程中可以更高效地使用内存中的数据,为后续编码提供便利,大幅提高开发效率。
数据结构要学哪些知识?
数据结构里囊括了各种数据的存储方案,并将它们进行了分门别类,分别是线性表、栈和队列、串、数组和广义表、树、图、查找表。这里给读者分享一张我精心整理的思维导图,图中罗列了数据结构几乎所有的知识点(猛击这里查看超清大图):
![数据结构思维导图](/uploads/allimg/240819/2-240Q9123605Z7.gif)
图 4 数据结构思维导图
声明:当前文章为本站“玩转C语言和数据结构”官方原创,由国家机构和地方版权局所签发的权威证书所保护。