数据类型与逻辑结构

数据类型

  数据类型是与数据结构密切相关的一一个概念。它最早出现在高级程序设计语言中,用

  以刻画程序中操作对象的特性。在用高级语言编写的程序中,每个变量、常量或表达式都
有一个确定的数据类型。


  数据类型(Data Type)是具有相同性质的计算机数据的集合及在这个数据集合上的一
组操作的总称,它显式或隐式地规定了数据的取值范围和操作特性。例如,C/C++语言中
的无符号字符型(unsigned char)代表闭区间[0, 255]中的整数,在这个整数集中可以进行
加、减、乘、整除、取模等操作。


  数据类型可以分为原子类型结构类型(或称导出类型、复合类型)。原子类型的值
是不可分解的,它由计算机语言提供,如C/C++语言中的整型、字符型等;结构类型的值
是可分解的,即由若干成分组成,并且这些成分本身还可以是结构的。结构类型要借用计
算机语言提供的数据组织机制,由用户自己定义,如C/C++语言中的结构、数组等。


  抽象数据类型(Abstract Data Type,ADT) 是指一个数学模型以及定义在该模型上的一
组操作的总称。“抽象”的含义是指其逻辑特征与具体的软硬件实现(即计算机内部的表示
和实现)无关。在用户看来,无论怎样实现,只要其数学特征不变,就不影响其外部使用。
抽象数据类型和数据类型实质上是-一个概念。例如,各种计算机都拥有的整数类型就
是一个抽象数据类型,在用户看来其数学特征相同,而实际上它们在不同处理器上的实现
是可以不同的。但另一方面,抽象数据类型的范畴更广,它不局限于在各种处理器中已定
义并实现的数据类型,还包括用户自己定义的数据类型。


  在定义抽象数据类型时,将- -组 数据和施加于这些数据上的一-组操作封装在- -起, 用
户程序只能通过在ADT里定义的某些操作来访问其中的数据,从而实现了信息的隐藏。
在这个过程中,数据的表示及其操作的细节在模块的内部给出,在模块的外部使用的只是
独立于具体实现的抽象的数据及抽象的操作。所以,抽象数据类型的特征是使用与实现相
分离,实行封装和信息隐藏。

 

逻辑结构

  为了表示数据间的关系,需要引入逻辑结构的概念。

  数据元素对应着客观世界中的实体,数据元素之间必然存在着各种各样的关系,这种
数据元素之间的关系就称为结构。其中,数据元素之间的关联方式(或称邻接关系)称做
数据的逻辑关系,数据元素之间逻辑关系的整体称为逻辑结构(Logical Structure)


  为了讨论方便,数据的逻辑结构- -般可用示意图表示。具体方法为,用小圆圈代表数
据元素,用小圆圈之间的连线代表数据元素间的关系,如果强调关系的方向性,可用带箭
头的线段表示关系。有四类基本的逻辑结构,如图所示。

 

  (1)集合:任何两点之间不考虑邻接关系或没有邻接关系,或称做没有关系的关系,
其数据组织形式松散,元素之间是“平等”的,它们的共同关系是“属于同一个集合”。也
可以说,集合中各元素之间除了“同属于-一个集合”的关系外,别无其他关系。


  (2)线性结构:有且仅有一个开始结点和一-个终端结点,并且任何结点都最多只有一
个直接前趋和-一个 直接后继。某点的直接前趋(Immediate Predecessor)是指与之相邻且在
它前面的结点,直接后继(Immediate Successor) 是指与之相邻且在其后的结点。开始结
点没有前趋,终端结点没有后继。线性结构中数据元素之间存在一一个对一 -个的关系。


  (3)树状结构:除一个特殊元素(根)外,每个元素都只有一一个直接前趋,但可有多
个直接后继,结点之间具有分支、层次特性。树状结构中数据元素之间存在一一个对多个的
关系。


  (4)图状结构:任何两点之间都可能邻接,结点之间形成网状结构。任- -元素都可有
多个直接前趋和多个直接后继,元素之间存在多个对多个的关系。


  线性结构是-种最常见的数据结构,本书第2章、第3章介绍的线性表、栈、队列、
串等均为线性结构。树状结构与图状结构也称为非线性结构,它的逻辑特征是-一个结点可
能有多个直接前趋或多个直接后继。集合比较特殊,可把它归到非线性结构,因为“线性”
之外都是“非线性”,但在实际使用时,也经常对其数据元素增加某种“线性”关系,如出
现的先后次序等,按线性结构处理(当然也可根据需要施加某种“非线性”关系,如分支、
层次关系等,按相应的非线性结构处理)。


  有一些数据结构,如多维数组和广义表,尽管本质上属于图状结构,但由于自身的具
体特点,与图状结构的处理方法有很大不同,所以一般单独讨论。


关于逻辑结构,有以下几点需要特别注意:
  (1)逻辑结构与数据本身的形式、内容无关。如机构组成、族谱管理等问题涉及的数
据,其形式、内容完全不同,但都是树状结构;而同一- 问题,改变某个元素的名称或内容,
逻辑结构并不受影响。


  (2)逻辑结构与数据元素的相对位置无关。如机构组成中,进行部门关系重组,这时.

结点间的相对位置可能改变,但整体上仍是树状结构。


  (3)逻辑结构与所含结点的个数无关。如不同的机构组成,树状结构中结点数不同;
而同一机构组成,增加或删除几个部门,其结果仍是树状结构。


  由此可见,一些表面上很不相同的数据可以有相同的逻辑结构,因此,逻辑结构是数
据组织的某种“本质性”的东西。事实上,逻辑结构是数据组织的主要方面。

  在不至于混淆的情况下,本书以后常常将直接前趋简称为前趋、直接后继简称为后继。

 

 

posted @ 2021-10-23 18:09  Colin_Cora  阅读(464)  评论(0编辑  收藏  举报