————————————————————————————————————————————
基本概念和术语
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
数据:是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
数据元素:是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
数据项:数据项是数据的不可分割的最小单位,一个数据元素由若干个数据项组成。
//例:书目检索中,每一本书的信息是一个数据元素,而书的每一项信息(书名/作者...)是一个数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
结构:数据元素相互之间的关系。
数据结构:相互之间存在一种或多种特定关系的数据元素的集合。基本结构:集合、线性结构、树形结构、图状结构和网状结构。讨论数据结构的目的是为了在计算机中实现对它的操作,因此还需要研究如何在计算机中表示它
数据结构的形式定义:Data_Structure = (D, S); 其中D是数据元素的有限集,S是D上关系的有限集。
例:小组由1位教师,1-3名研究生和1-6名本科生组成,教师指导研究生,研究生指导1-2名本科生定义以下数据结构:
逻辑结构:结构定义中的"关系"描述的是数据元素之间的逻辑关系,即逻辑结构。
存储结构(物理结构):数据结构在计算机中的表示(又称映像)。包括两方面:1.数据元素的表示 2.关系的表示
元素(结点):用由若干个bit组合起来形成的位串来表示一个数据元素,这个位串即为元素。可以看作是数据元素在计算机中的映像
数据域:当数据元素由若干个数
数据元素之间的关系在计算机中的两种表示方法以及对应的存储结构:
顺序映像 -> 顺序存储结构 :借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,如:一维数组
非顺序映像 ->链式存储结构 :借助指示元素存储地址的指针表示数据元素之间的逻辑关系,如:指针
虚拟存储结构:数据结构中讨论的存储结构是数据结构在C虚拟处理器中的表示,所以称为虚拟存储结构。
//例:如果要表示共轭复数3.0-2.3i,在顺序存储结构中是用地址相邻的4个字长的位串表示的,在链式存储结构中3.0位后面存放的是指向 -2.3的地址0415的指针,
数据类型:是一个值的集合和定义在这个值集上的一组操作的总称。例:int整型的值集为在某个区间上的整数,定义在其上的操作为加减乘除和取模等算术运算
数据类型分为两类:
- 非结构的原子类型:不可分解
- 结构类型(固定聚合类型+可变聚合类型):是由若干成本按某种结构组成的,它的成分可以是非结构的也可以是结构的。
数据结构可以看成是一组具有相同结构的值,而结构类型可以看成是由一种数据结构和定义在其上的一组操作组成。
多形数据类型:其值的成分不确定的数据类型。从抽象数据类型的角度看,具有相同的数学抽象特性。注:需要借助C++实现
抽象数据类型(Adstract Data Type,ADT):是指一个数学模型以及定义在该模型上的一组操作。和数据类型在实质上是一个概念。一个含抽象数据类型的软件模块通常应包含三个部分:1.定义 2.表示 3.实现
分为以下三种类型:
- 原子类型:同上,例:int,char
- 固定聚合类型:其值由确定数目的成分按某种结构组成。例:复数是由两个实数依确定的次序关系构成
- 可变聚合类型:和固定聚合类型相比,其值的成分的书目不确定。例:定义一个有序整数序列的抽象数据类型,序列的长度可变。
抽象数据类型可用三元组表示:(D,S,P)
ADT 抽象数据类型名
{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
基本操作名(参数表) //两种参数:1.赋值参数:只为操作提供输入值 2.引用参数:以&开头,除可提供输入值外,还将返回操作结果
初始条件:<初始条件描述> //描述操作执行之前数据结构和参数应该满足的条件,若不满足则操作失败并返回错误信息。
操作结果:<操作结果描述> //正常操作完成后数据结构的变化状况和应返回的结果。
...
基本操作名(参数表)
初始条件:<初始条件描述>
操作结果:<操作结果描述>
} ADT 抽象数据类型名
例:
抽象数据类型三元组的定义(左)
抽象数据类型Triplet的表示(右)
代码实现:
————————————————————————————————————————————