大话数据结构全套学习笔记——1.绪论

数据结构其实本质上就是将许许多多的数据之间的某种联系结合起来的组合

学习任何一门编程语言都离不开:1.学习理论知识 2.做相关习题积累经验 3.多去动手实践代码

三者都是循序渐进的,要是缺少了其中的一个步骤,学习的整个过程就是失去本身所存在的意义和高效的成果

文章内部的大部分文章内容我都会使用比较口语化的语言进行描述,并不会是晦涩难懂的专业术语

废话少说,开始学习:

目录

基本概念和术语:

逻辑结构:

物理结构:

数据类型:数据类型分为   “原子类型”  和   “结构类型”

抽象数据类型:(ADT :Abstract Data Type)


基本概念和术语:

数据:数据就是描述一个事物的表达方式,我们学习的C语言里面的数据类型就是如此,

我们学习了整型数据(int)、字符型数据(char)、浮点型数据(double / float)

这些都属于数值性数据,有人就要说了,那字符型的不是元素吗?咋能叫数值型呢?

宝,你再想想,字符型数据不应该是由二进制的  Ascll码组成的吗?所以说他也是属于数值型数据的,那么除了数值型数据,还有其他类型的数据吗?

有!

我们生活中许许多多的事物本身就是由数据组成的,

在我们浏览的网页里面,许许多多数据就在我们眼前,图像,声音,视频,等等..... 都是数据

 

 但是这些非数值型数据要怎么才能被计算机识别呢?其实这些数据到最后都会通过编码的手段来变成计算机能识别的字符数据来处理。

数据元素:数据元素其实就是组成一个集合的子集

如果说把人要看成一个数据的话,那么数据元素就是(好人/坏人)

数据项:数据项其实就是数据元素的子集,如果说人类之中有好人坏人,那好人坏人都有五官,可是如今的社会早已被电视剧里面的狗血剧情变成了“三观跟着五官跑了”

 

 

数据结构:说了这么久,那么什么才叫数据结构呀!

其实我们世间的一切事物都是有一定的联系的,所以说所有数据之间其实都是有关联的,他们即相对独立的存在,有相互之间有一定的密切联系,这一种密切的联系,其实我们把它们叫做“数据结构”

那么数据结构到底有什么结构呢?其实数据结构分为“逻辑结构”和“物理结构”

逻辑结构:

逻辑结构分为4种:

1.集合结构:

线性结构:

可以用数组来解释,数组其实就是在计算机内部有顺序的存储的一组数

树形结构:

树形结构就像是大树一样,只不过在计算机理论里面,这棵树是一个反向生长的树,并且在“数型结构”里面,其实是一对多的。 

 真实的树:

 

 树形结构:

图形结构:

图形结构其实就是多对多的关系。

就像是爱情一样,哪有一对一的情况,难免会出现1:N 的情况

在图形结构里面,每一个圈都是一个结点

物理结构:

其实也被我们经常叫做“存储结构”,其实本质上就是将数据的逻辑结构在计算机内部实现,将数据元素在计算机内部排列的方式。

物理结构分为:顺序结构、链式结构

顺序结构依旧使用数组的例子:

其实告诉你一个小秘密,其实数组的本质在逻辑结构和物理结构上都是一致的,都是顺序的存在计算机内部

 

 链式存储结构:

其实顺序存储结构我们大多数大多数情况下是不喜欢的,因为开辟的数组是有限的,我要去认识好多的美女(好朋友),那我们加微信,如果说你的通讯录内部只能存储10个人,我会很遗憾第11个美女不能和我在微信上成为微信好友了,此时我们就应该想“能不能有一个可以无限加数据的数组呢?”

链式存储结构产生了:链式结构解决了这个问题,他将一个数据域变成了两个区域,一个是数据域(存放数据的位置)一个是指针域(指向下一个数据的位置)

这样让我们在逻辑结构上实现了数据之间的有顺序的存储,并且在物理结构上实现了存储无限制的操作,何乐而不为? 如果存储的数据是最后一个,那么指针域直接指向NULL(空指针)作为结束的标志来结束这个链表(后面的知识会讲到)。

但是逻辑结构和物理结构其实在本质上是有区别的:

逻辑结构:所有数据的抽象化处理

物理结构:所有数据在计算机内部的存储方式

数据类型:数据类型分为   “原子类型”  和   “结构类型”

原子类型:本质上不可再细化的数据类型,如:int、char、double、float 

结构类型:struct 类型(结构体类型)、

                   arr(数组类型):因为数组内部本质上就是连续存储一串相同类型的数

所有数据逻辑的呈现,其实本质上就是事物的规律性被抽象化概括的的特性。

抽象数据类型:(ADT :Abstract Data Type)

ADT在实际应用中经常会用到这种思维模式

比如说:超级玛丽(Super Mario):最早期的超级玛丽只能进行前进后退,我们就需要将游戏的人物前进的操作和后退的操作进行代码实现,并且随着玩家对游戏的不断反馈,更多的功能操作也随之而来出现在我们的视野里面。这样的操作我们就应该用代码来实现将实际操作变成抽象逻辑的代码,在对内部的细节进行细化处理,先整体后局部地不断修正代码,使抽象化逻辑变成实际可以看见的事物。

ADT其实可以被看做这样的一个逻辑:

 

在后面的数据结构的规范化书写,在下面给大家一个框架,就是标准化数据结构书写框架。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值