1.2基本概念和术语
1.2.1前言
1.2.2基本概念和术语
1.2.1前言
参照课本,在本节中,将介绍一些概念和术语并确定其含义,请注意区分和理解这些含义和所应用的层次(数学层面、计算机层面等),以方便实际应用。
tips:数学层次是通用层次,在计算机层面是普适的。
1.2.2基本概念和术语
数学层次
(1)数据(data):
对客观事物的符号表示,
在计算机科学中,指所有能被输入到计算机中,并能被程序处理的符号的总称。
(2)数据元素(data element):
数据元素是数据的基本单位,在计算机程序中常作为一个整体处理。
类似于节点(node),也可以理解成向量组中的一个向量。
(3)数据项(data item):
有时,单个数据元素可以由若干个数据项组成,例如书目信息的一项包含书名、作者名、书号等等信息。
数据项是数据的不可分割的最小单位。
数据项可以理解为数据元素(类似于向量)在不同维度的分量,而其值就是分量的值。
(4)数据对象(data object):
数据对象是性质相同的数据元素的集合。
数据对象可以理解为一个向量组,包含着许多相干的向量(数据元素)。
(5)数据结构(data structure):
数据结构是指:相互之间存在一种或多种特定关系的数据元素的集合。
数据结构根据结构中元素之间的关系的特性不同,通常有下列4类基本结构:
(1)集合:由离散的节点构成的集合体,数据元素除了同属于一个集合外,无其它的关系。
(2)线性:节点间存在线性连接,数据元素之间存在前驱或者后继的一对一的关系。
(3)树形结构:节点呈现树状,数据元素间存在类似于父节点与子节点的一对多的关系。
(4)图状结构或网状结构:节点呈现网状,数据元素间存在多对多的辐射状关系。
image.png
数据结构的形式定义为:数据结构是一个二元组
Data_Structure = ( D , S )
其中:D是数据元素的有限集,S是D上的关系的有限集。
下面是一个例子:
在计算机科学中,复数可取如下定义:复数是一种数据结构
Complex = ( C , R )
其中,C是两个实数的集合{c1,c2};R={P},而P是定义在集合C上的一种关系{},其中,序偶表示c1是实数的实部,c2是实数的虚部。
(5)逻辑结构:
结构定义中的“关系”描述的是数据元素之间的逻辑关系,因此又称为逻辑结构。
数据的逻辑结构是对数据之间关系的描述,有时就把逻辑结构简称为数据结构。
根据数据元素间逻辑关系的不同,可以将数据结构按逻辑分为两类:
线性数据结构:线性表、栈、队列、数组、字符串
非线性数据结构:树、二叉树、图
计算机层次
(1)存储结构:
数据结构在计算机中的表示(又称映像)称为数据的物理结构,又称存储结构。
在计算机中,可以用一个由若干位(bit)组合形成的一个位串表示一个数据元素,这个位串称为元素(element)或是节点(node)。当数据结构由若干数据项组成时,位串中对应各个数据项的子位串称为数据域(data filed)。因此,元素或节点可以看成数据元素在计算机中的映像。
数据元素之间的关系在计算机中有两种不同的表示方法:顺序映像和非顺序映像,并得到两种不同的存储结构:顺式存储结构和链式存储结构。
(1.1)顺式存储结构:
顺式存储结构借助元素在存储器中的相对位置来表示数据元素间的逻辑关系。
其特点是:数据元素的地址是连续的。
(1.2)链式存储结构:
链式存储结构借助指针(pointer)来表示元素间的逻辑关系。
其特点是:数据元素间的地址不一定连续,每一个节点的数据域占用一片连续的存储空间。(如链表)
image.png
数据类型(data type)
(1)数据类型是一个值的集合和定义在这个值上的一组操作的总称。
区别于高级程序语言中的定义,这里不仅仅是值的类型,也包含值上的操作。
(2)抽象数据类型(abstract data type,简称ADT)
抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。
注:抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部的如何表示和实现无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部使用。
高级程序设计语言中数据类型可分为两类,一类是非结构的原子类型,另一类是结构类型,其中原子类型的值是不可分解的,而结构类型的值是由若干成分按某种结构组成的,因此是可分解的。
而抽象数据类型按其值的特性可以分为以下三类:
(2.1)原子类型(atomic data type):
属于原子类型的变量的值是不可分解的,一般来说已有的原子类型已经足够,但有时也有必要定义新的原子数据类型,如上百位的整数或是新类型的指针。
(2.2)固定聚合类型(fixed-aggregate data type):
属于该类型的变量,其值由确定数目的成分按某种结构组成。例如,复数是由两个实数按次序分别作为实部和虚部的系数而构成。
(2.3)可变聚合类型(variable-aggregate data type):
和固定聚合类型相比,其组成结构的成分的数目不固定。例如,定义一个有序整数列的抽象类型,序列的长度是可变的。
显而易见,后两种抽象数据类型属于结构类型。
抽象数据类型和数据类型实质上是一个概念,例如整数或是数组也可看做抽象数据类型。
下面给出抽象数据类型的形式定义:
ADT = ( D , S , P )
其中,D是数据对象,S是D上的关系集,P是对D的基本操作集。
现采取以下格式定义抽象数据类型
ADT 抽象数据类型名{
数据对象:
数据关系:
数据操作:
}ADT 抽象数据类型名
其中,数据对象和数据关系的定义用伪代码表示,基本操作的定义格式为
基本操作名(参数表)
初始条件:
操作结果:
基本操作有两种参数,赋值参数只为操作提供输入值,引入参数以&前缀,除可提供输入值外,还将返回操作结果。若初始条件为空,则省略初始条件。
下面是一个例子:
ADT Triplet{
数据对象:D = {e1,e2,e3|e1,e2,e3∈Elemset (定义了关系运算的某个集合)}
数据关系:R = {,}
基本操作:
InitTriplet( &T , v1 , v2 , v3 )
操作结果:构建了三元组T,元素e1,e2,e3分别被赋以参数 v1, v2, v3的值。
DestroyTriplet( &T )
操作结果:三元组T被销毁。
Get( T , i , &e )
初始条件:三元组T已存在,1<= i <= 3。
操作结果:用 e 返回 T 的第 i 元的值。
Put( &T , i , e )
初始条件:三元组T已存在,1<= i <= 3。
操作结果:改变T的第 i 元的值为 e。
IsAscending( T )
初始条件:三元组T已存在。
操作结果:如果T的3个元素按升序排列,则返回1,否则返回0。
IsDescending( T )
初始条件:三元组T已存在。
操作结果:如果T的3个元素按降序排列,则返回1,否则返回0。
Max( T , &e )
初始条件:三元组T已存在。
操作结果:用e返回T中三个元素的最大值。
Min( T , &e )
初始条件:三元组T已存在。
操作结果:用e返回T中三个元素的最小值。
}ADT Triplet
(3)多形数据类型(polymorphic data type)是指其值的成分不确定的数据类型。例如例子中的e1,e2,e3,可以是整数、字符、字符串,甚至是更复杂的结构类型,只需要能进行关系运算即可。然而,不论其元素具有何种特性,元素之间的关系相同,基本操作也相同。
图源:《数据结构(C语言版)》严蔚敏、吴伟民 编著 清华大学出版社出版