最近感觉数据结构方面实在欠缺,对于菜鸟来说,得每晚努力学习学习,可以说数据结构从来就没懂过,逼着补补课
数据结构是相互之间存在一种或者多种特定关系的数据元素的集合
逻辑结构
1:集合结构
集合结构中的数据元素除了同属于一个集合之外,它们之间就没有其他关系。我的感觉就是所有元素同属于一个类似数学中集合
2:线性结构
线性结构中的数据元素之间是一对一的关系。
3:树形结构
树形结构中的数据元素之间存在一种一对多的层次关系。说的土一点就是上一层不停分裂
4:图形结构
图形结构中的数据元素之间是多对多的关系
物理结构
也叫存储结构,指数据的逻辑结构在计算机中的存储形式。意思应该就是如何把数据元素存储到计算机的存储器中。存储结构反映元素之间的逻辑关系。
1:顺序存储结构
顺序存储结构是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。说白了也就是排队按顺序占位置,每个人占一小段空间,谁也别插队。比如数组就是顺序存储结构,当创建一个包含5个整型数据的数组,计算机就在内存中找了片空地,按照一个整型所占位置的大小*9,开辟出一段连续的空间,于是第一个数组元素就放在第一个位置,第二个数组元素就放在第二个位置,如此依次摆放
2:链式存储结构
链式存储结构是把数据元素存放在任意的存储单元里,这组存储但愿可以是连续的,也可以是不连续的。就比如排队系统要求每个人去了领一个号,等着叫号轮到你了就行了,只需要关注前一个号是否被叫到,如果叫到了,下一个就轮到你了。数据元素的存储关系并不能反映其逻辑关系,因此需要一个指针来存放数据元素的地址,这样通过地址就可以找到相关联数据元素的位置。这样数据存哪里就不重要了,只要有一个指针存放了相应地址就能找到它
数据类型
1:数据类型
数据类型指一组性质相同的值的集合及定义在此集合上的一些操作的总称。数据类型是按值得不同进行划分。有的语言里,每个变量,常量和表达式都有各自的取值范围,类型就能说明变量或者表达式的取值范围和所能进行的操作
计算机里内存不是无限大,如果仅仅计算10以内加减法之类的,显然不需要开辟很大的还适合小数甚至字符运算的内存空间,所以对数据进行分类,划分出很多种数据类型。在C语言里,按取值的不同,数据类型可分为:
原子类型:不可以再分解的基本类型,比如整型,实型,字符型等
结构类型:由若干类型组合而成,是可以再分解的。比如整型数组是由若干整型数据组成
比如C语言中变量声明了int a,b,那么在给a和b赋值的时候不能超过了int的取值范围,而且a和b之间的运算只能进行int类型允许的运算
2:抽象数据类型
抽象数据类型是指一个数学模型及定义在该模型上的一组操作,定义仅仅取决于它的一组逻辑属性,而与计算机内部如何表现和实现无关。比如pc,平板,手机等都会有整型类型,那么整型其实就是一个抽象的数据类型,尽管在实现方法上可能会不一样,但是定义的数学特性相同的,所以抽象的意义在于数据类型的数学抽象特性
抽象数据类型除了已经定义和实现的数据类型,还有程序设计时候自己编写的数据类型,比如画图软件经常会用到坐标,成对出现x和y,3D的还有z,既然这三个整型数据都是同时出现,可以定义一个point的抽象数据类型,它有x,y,z三个整型变量,那么操作point变量就能知道坐标了
抽象数据类型体现了程序设计中问题分解,抽象和信息隐藏的特性,把实际问题分解为许多规模小而且容易处理的问题,然后建立一个计算机能处理的数据模型,并把每个功能模块的实现细节作为一个独立的单元,使得具体实现过程隐藏起来
下面是网上COPY的一个抽象数据类型格式:
ADT 抽象数据类型名
Data
数据元素间逻辑关系的定义
Operation
操作1
初始条件
操作结果描述
操作2
……
操作n
……
endADT