数据结构的相关名词:
1.1. 数据(Data)
数据是描述客观事物的数值、字符以及能输入机器且能被处理的各种符号总称。换句话说,数据是对客观事物采用计算机能够识别、存储和处理的形式所进行的描述。简而言之,数据就是计算机化的信息。
1.2. 数据元素
数据元素是组成数据的基本单位, 是数据集合的个体,在计算机中通常作为一个整体进行考虑和处理。
一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。例如:
1.3. 数据对象
数据对象是性质相同的数据元素的集合,是数据的一个子集。例如:整数数据对象是集合N={0, ±1, ±2, …},字母字符数据对象是集合C={′A′,′B′,…,′Z′},表1-1所示的学籍表也可看作一个数据对象。由此可看出,不论数据元素集合是无限集(如整数集)、有限集(如字符集),还是由多个数据项组成的复合数据元素(如学籍表),只要性质相同, 都是同一个数据对象。
综上1~3所述,再分析数据概念:
1.4.数据结构
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
数据元素相互之间的关系称为结构。这种关系既包括逻辑上的关系也包括物理存储位置上的关系,因而结构就分成逻辑结构和存储结构。
存储不是最终目的,我们研究这些关系,是为了能够操纵这些数据。这就是运算。
所以,数据结构一般包括以下三方面的内容:数据的逻辑结构、数据的存储结构和数据的运算。
1.4.1、数据的逻辑结构:数据元素之间的逻辑关系。
(1) 集合结构:结构中的数据元素之间除了同属于一个集合的关系外,无任何其它关系。
(2) 线性结构:结构中的数据元素之间存在着一对一的线性关系。
(3) 树形结构:结构中的数据元素之间存在着一对多的层次关系。
(4) 图状结构或网状结构:结构中的数据元素之间存在着多对多的任意关系。
1.4.2存储结构
存储结构(又称物理结构)是逻辑结构在计算机中的存储映象,是逻辑结构在计算机中的实现,它包括数据元素的表示和关系的表示。
形式化描述:D要存入机器中,建立一从D的数据元素到存储空间M单元的映象S,D→M, 即对于每一个d,d∈D, 都有唯一的z∈M,使S(D)=Z, 同时这个映象必须明显或隐含地体现关系R。
逻辑结构与存储结构的关系为:存储结构是逻辑关系的映象与元素本身的映象。逻辑结构是数据结构的抽象,存储结构是数据结构的实现,两者综合起来建立了数据元素之间的结构关系。
数据元素之间的关系在计算机中有两种不同的表示方法:
■顺序映象 (顺序存储结构)
■非顺序映象(非顺序存储结构)
1.4.3数据的运算
数据的运算是在数据上施加的一系列操作。 基本操作主要有以下几种:
(1) 插入: 在数据结构中的指定位置上增添新的数据元素;
(2) 删除: 删去数据结构中某个指定数据元素;
(3) 更新:改变数据结构中某个元素的值, 在概念上等价于删除和插入操作的组合;
(4) 查找:在数据结构中寻找满足某个特定要求的数据元素(的位置和值);
(5) 排序:(在线性结构中)重新安排数据元素之间的逻辑顺序关系,使数据元素按值由小到大或由大到小的次序排列。
数据结构三个方面:
1.5.数据类型
数据类型是一组性质相同的值集合以及定义在这个值集合上的一组操作的总称。数据类型中定义了两个集合,即该类型的取值范围,以及该类型中可允许使用的一组运算。例如高级语言中的数据类型就是已经实现的数据结构的实例。 从这个意义上讲,数据类型是高级语言中允许的变量种类, 是程序语言中已经实现的数据结构(即程序中允许出现的数据形式)。在高级语言中,整型类型可能的取值范围是-32 768~+32 767, 可用的运算符集合为加、 减、 乘、 除、 乘方、 取模(如C语言中+, -, *, /, %)。
高级语言中的数据类型分为两大类:
原子类型:其值不可分解。如C语言中的标准类型(整型、实型、字符型、指针型)。
结构类型:其值是由若干成分按某种结构组成的,因此是可以分解的,并且它的成分可以是非结构的,也可以是结构的。
1.6 数据抽象与抽象数据类型
1.6.1.数据的抽象
汇编语言中十进制表示的数据98.65、9.6E3等, 它们是二进制数据的抽象;
高级语言中,给出更高一级的数据抽象,如整型、实型、字符型等,
还可以进一步定义更高级的数据抽象,如各种表、队、栈、树、图、窗口、管理器等复杂的抽象数据类型。
1.6.2. 抽象数据类型(Abstract Data Type)
抽象数据类型( Abstract Data Type简称ADT)是指基于一类逻辑关系的数据类型以及定义在这个类型之上的一组操作。抽象数据类型的定义取决于客观存在的一组逻辑特性,而与其在计算机内如何表示和实现无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部使用。从某种意义上讲,抽象数据类型和数据类型实质上是一个概念。整数类型就是一个简单的抽象数据类型实例。“抽象”的意义在于数学特性的抽象。一个ADT定义了一个数据对象,数据对象中各元素间的结构关系,以及一组处理数据的操作。ADT 通常是指由用户定义且用以表示应用问题的数据模型,通常由基本的数据类型组成,并包括一组相关服务操作。
抽象数据类型是近年来计算机科学中提出的最重要的概念之一,它集中体现了程序设计中一些最基本的原则:分解、抽象和信息隐藏。
一个抽象数据类型确定了一个模型,但将模型的实现细节隐藏起来;它定义了一组运算,但将运算的实现过程隐藏起来
数学模型→抽象数据类型→数据结构,恰好反应了信息结构转换的三个重要阶段,而在这个转换过程中,数据结构是基础,抽象数据类型是中枢。
1.6.3 ADT的表示与实现
用三元组描述: (D,S,P)
D是数据对象,S是D上的关系集,P是对D的基本操作集。
ADT的定义:
ADT
{ 数据对象:<数据对象的定义>
结构关系:<结构关系的定义>
基本操作:<基本操作的定义>
}ADT
线性表的抽象数据类型的描述:
ADT Linear_list
数据元素 所有ai属于同一数据对象,i=1,2,……,n n≥0;
逻辑结构 所有数据元素ai(i=1,2,…,n-1)存在次序关系
操作 设L为Linear_list
Initial(L)初始化空线性表;
Length(L)求线性表的表长;
Get(L,i)取线性表的第i个元素;
Insert(L,i,b)在线性表的第i个位置插入元素b;
Delete(L,i)删除线性表的第i个元素;
1.6.4 抽象数据类型实现
第一种情况: 传统的面向过程的程序设计。
第二种情况: “包”、 “模型”的设计方法。
第三种情况: 面向对象的程序设计(Object Oriented Programming,简称OOP)。