1.2 数据结构的基本概念和术语
1.2.1 数据、数据元素、数据项、数据对象
一、数据
1.定义:是能输入计算机且能被计算机处理的各种符号的集合。
2.分类
①数值型的数据:整数、实数等。(可加减乘除,开方,乘方等)
②非数值型的数据:文字、图像、图形、声音(不可加减乘除等)
二、数据元素和数据项
1.数据元素: 是数据的基本单位,在计算机程序中通常作为一个整体,也称为元素、记录、结点、顶点。一个数据元素可由若干个数据项组成。
2.数据项: 构成元素的不可分割的最小单位。
例:0002 李明 男 1998/12/25 党员
这一整串的信息属于数据元素,而其中的某一个信息属于数据项,如姓名、性别等。
三、数据对象
1.定义: 数据对象是性质相同的数据元素的集合,是数据的子集。
例:整数数据对象是集合N={0,+-1,+-2......}
2.数据元素与数据对象的区别
①定义上:数据元素是组成数据的基本单位;数据对象是性质相同的数据元素的集合。
②与数据的关系:数据元素是集合的个体;数据对象是集合的子集。
(可以这么理解:数据>=数据对象>数据元素>数据项)
1.2.2 数据结构
(数据结构是相互之间存在一种或多种特定关系的数据元素的集合)
一、逻辑结构
1.定义:描述数据元素之间的逻辑关系,与数据的存储无关,独立于计算机,是从具体问题抽象出来的数学模型。
2.种类
①划分一:
线性结构:有且仅有一个开始和一个终端结点,并且所有结点(除了头和尾)都最多只有一个直接前驱和一个直接后继。如:线性表、栈、队列、串。
非线性结构:一个结点可能有多个直接前驱和直接后继。如:树、图。
②划分二:
集合结构:结构中的数据元素之间除了同属于一个集合的关系外,无其他任何关系。
线性结构:结构中的数据元素之间存在一对一的线性关系。
树形结构:结构中的数据元素之间存在一对多的层次关系。
图状或网状结构:结构中的数据元素之间存在着多对多的任意关系。
关于逻辑结构划分为什么的设问:
1. 答案设置为两空:线性和非线性
2. 答案设置为三空:线性、树和图
3. 答案设置为四空:线性、集合、树和图
二、存储结构
1.定义:数据对象在计算机中的存储表示,也称物理结构。
2.种类
①顺序存储结构:用一组连续的存储单元依次存储数据元素,数据元素之间的逻辑关系由元素的存储位置来表示。(C语言中用数组来实现顺序存储结构)
如:(apple,banana,peach)
apple |
banana |
peach |
②链式存储结构:用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针来表示。(C语言中用指针来实现链式存储结构:每个结点占用两个连续的存储单元,一个存放结点的信息,另一个存放后继结点的首地址)
如:(apple(头指针),banana,peach,.......,strawberry(后面没有了,为空)
结点信息 后继结点首地址
130 | banana | 135 |
135 | peach | 170 |
160 | strawberry | Null |
165 | apple | 130 |
170 | waterlemon | 155 |
155 | grape | 160 |
1.2.3 数据类型和抽象数据类型
一、数据类型
1.定义:是一组性质相同的值的集合以及定义于这个值集合上的一组操作的总称。
数据类型=值的集合+值集合上的一组操作
2.注意:在使用高级程序设计语言编写程序时,必须对程序中出现的每个变量、常量或表达式,明确说明它们所属的数据类型。(隐含规定了数据存储结构、数据取值范围、数据基本运算)
例如,C语言中在:
·提供int、char、float、double等基本数据类型
·数组、结构、共用体、枚举等构造数据类型
·指针、空类型
·用户也可以用typedef自己定义数据类型
数组、字符串等最基本数据结构可以用数据类型来实现,但栈、队列、树、图等不能直接用数据类型来表示。
二、抽象数据类型
1.定义:是指一个数学模型以及定义在此数学模型上的一组操作。
2.形式定义:可用(D,S,P)三元组表示。
(D:数据对象;S:D上的关系集;P:对D的基本操作集)
3.定义格式:
ADT 抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作地定义>
}ADT 抽象数据类型名
其中,数据对象和数据关系的定义采用数学符号和自然语言描述,基本操作的定义格式为:
基本操作名(参数表)
初始条件:<初始条件描述>
初始结果:<操作结果描述>
参数表:
①赋值参数:只为操作提供输入值(如:power(x,y))
②引用参数:以“&”开头,除可提供输入值外,还将返回操作结果(如:scak(&G,n)返回G)
4.ADT举例:
①Circle的定义
ADT Circle{
数据对象:D={r,x,y|r,x,y均为实数}
数据关系:R={<r,x,y>|r是半径,<x,y>是圆心坐标}
基本操作:
Circle(&C,r,x,y)
操作结果:构造一个圆。
double Area(C)
初始条件:圆已存在。
操作结果:计算面积。
double Circumference(C)
初始条件:圆已存在。
操作结果:计算周长。
......
}ADT Circle
②复数的定义
ADT Complex{
D={r1,r2|r1,r2都是实数}
S={<r1,r2>|r1是实部,r2是虚部}
assign(&C,v1,v2)
初始条件:空的复数C已存在
操作结果:构造复数C,r1,r2分别被赋予参数v1,v2的值。
destroy(&C)
初始条件:复数C已存在
操作结果:复数C被销毁
//......
}ADT Complex
Complex抽象数据类型中的基本操作:
a. Assign(&Z,v1,v2)
操作结果:构造复数Z,其实部和虚部,分别被赋予参数v1、v2的值。
b. Destroy(&Z)
操作结果:复数Z被销毁。
c. GetReal(Z,&realPart)
初始条件:复数已存在。操作结果:用realPart返回复数Z的实部值。
d. Getlmag(Z,&ImagPart)
初始条件:复数已存在。操作结果:用ImagPart返回复数Z的虚部值。
e. Add(z1,z2,&sum)
初始条件:z1,z2是复数。操作结果:sum返回两个复数z1,z2的和。
(share今日份治愈文案:“会遇到那束光,或早或晚)