一. 数据结构是数据对象、存在于对象的实例以及组成实例的数据元素之间的各种关系,并且这种关系能通过定义函数给出。
数据结构是抽象数据类型的物理实现。
数据结构的设计过程:抽象层,数据结构层,实现层。
具体如下图所示
二.数据结构的组成
1.数据
数据是描述客观事物的符号,是计算机可操作的对象,是能被计算机识别并输入给计算机处理的符号集合
总结两个特点:1.可以输入到计算机中。 2.能被计算机识别并处理的符号。
2.数据元素
组成数据的,有一定意义的单位,在计算机中通常作为整体处理,也被称为记录,是数据的基本单位,也被称为元素,结点,顶点,记录等。例如在人类中,人就是一个数据元素。
3.数据项
一个数据元素可以由若干个数据项组成,数据项是数据中不可分割的最小单位。再以人为例子,人是人类的数据元素,那么手,脚,眼睛,鼻子,嘴等器官就是组成人的数据项。
4.数据对象
数据对象是性质相同的数据元素的集合,是数据的子集。性质相同(指数据元素拥有相同数量和类型的数据项)。
总结
数据结构:字面拆分理解
结构:简单理解为关系,结构是指各个组成部分的相互搭配和排列的方式,不同数据元素之间不是独立的,而是存在特定的关系,这种关系称为结构
数据:包含数据、数据元素
所以,数据结构是相互之间存在着一种或多种特定关系的数据元素的集合
在实际编程过程中,我们必须分析待处理对象的特性及各个处理对象之间的关系,这就是研究数据结构的意义。
三.逻辑结构和物理结构
数据结构分为以下两种:
1.逻辑结构
是指数据对象中数据元素之间的相互关系,分为四种
1.1 集合结构
集合中的元素,除了同处于一个集合中,在没有任何其他的关系,元素关系是平等的,共同属性就是同属于一个集合中
如下图所示:
1.2 线性结构
线性结构的元素之间是一对一的关系
如下图所示:
1.3 树形结构
树形结构的数据元素之间存在一种一对多的层次关系
如下图所示:
1.4 图形结构
图形结构中的数据元素关系是多对多的关系
如下图所示:
总结:逻辑结构是针对具体问题的,是为了解决某个问题,在针对某个问题理解的基础上选择合适的数据结构表示数据元素之间的逻辑关系。
2.物理结构(存储结构)
物理结构是指数据的逻辑结构在计算机中的存储形式,数据是数据元素的集合,那么根据物理结构的定义,实际上就是如何把数据元素存储到计算机的存储器中(存储器主要是针对内存而言,像硬盘,软盘,光盘等外部存储器的数据组织通常用文件结构来描述)。
存储结构分为两种:顺序存储结构和链式存储结构
2.1 顺序存储结构
把数据元素存储在地址连续的存储单元中,其数据关系的逻辑关系和物理关系是一致的
如下图所示:
这种存储结构其实很简单,就是站位排队,大家都按顺序排好,每个人占一段小空间,谁也别插谁的队。数组就是这样的存储结构。
2.2 链式存储结构
把元素放入任意的存储单元中,这组存储单元可以是连续的,也可以是不连续的,这样数据元素的存储关系并不能反应其逻辑关系,所以,需要一个指针存放数据元素的地址,通过地址就能找到相应数据元素的位置。
如下图所示:
总结:
链式存储很灵活,数据存在哪不重要,只要有一个指针存放了相应的地址就能找到它了,但是按照理解,链式结构除了头结点和尾结点,都存在着一个上线和一个下线,如果中间断开了,就不知道上线是谁或者是下线是谁了。
三. 抽象数据类型
数据类型:是指一组性质相同的值的集合及定义在此集合的一些操作的总称。
按照数据类型的值是否可以分解,数据类型可以分为基本数据类型和聚合数据类型
1,. 基本数据类型:其值不能机一部分解,一般是程序设计语言自身定义的一些数据类型,比如整形、浮点型、字符型
2. 聚合数据类型:其值可以进衣服分解为若干分量,一般是用户自定义的数据类型,如C语言中的结构体,数组等。
抽象数据类型(ADT)
抽象数据类型是指数据的组织及其相关的操作,可以看做数据的逻辑结构及其在逻辑结构上定义的操作。
一个抽象数据类型可以定义为如下形式:
ADT 抽象数据类型名{
数据对象:(数据元素集合)
数据关系:(数据关系二元组结合)
基本操作:(操作函数的罗列)
}ADT 抽象数据类型名;
抽象数据类型一般具有如下两个重要特征:
1 . 数据抽象:使用抽象数据类型ADT时,其强调的是实体的本质特征,所能够完成的功能以及与外部用户的接口。
2. 数据封装:用于将实体的外部特性和其内部实现细节进行分离,并且对外部用户隐藏其内部的实现细节。
抽象数据类型可以看做描述问题的模型,它独立于具体实现。优点是,将数据和操作封装在一起,用户程序只能通过抽象数据类型里定义的默写操作来访问其中的数据,实现了信息隐藏。Java中的接口就可以看做是抽象数据类型,接口的实现类就是来实现抽像数据类型的。
抽象数据类型和接口的概念其实很好的表示了程序设计中的两层抽象,抽象数据类型是概念层上的抽象。接口则属于实现层上抽象。