抽象数据类型

上传人:大米 文档编号:490286502 上传时间:2022-08-26 格式:DOCX 页数:12 大小:63.34KB
返回 下载 相关 举报
抽象数据类型_第1页
第1页 / 共12页
抽象数据类型_第2页
第2页 / 共12页
抽象数据类型_第3页
第3页 / 共12页
抽象数据类型_第4页
第4页 / 共12页
抽象数据类型_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《抽象数据类型》由会员分享,可在线阅读,更多相关《抽象数据类型(12页珍藏版)》请在金锄头文库上搜索。

1、专题1数据结构分类与抽象数据类型1.1数据结构分类数据结构讨论现实世界和计算机世界中的数据及其相互之间的联系,这体现在逻辑和 存储两个层面上,相应称之为逻辑结构和存储结构。也就是说,在现实世界中讨论的数据 结构是指逻辑结构,在计算机世界中讨论的数据结构是指存储结构,又称为物理结构。数据的逻辑结构总体上分为4种类型:集合结构、线性结构、树结构和图结构。数据 的存储结构总体上也分为4种类型:顺序结构、链接结构、索引结构和散列结构。原则上, 一种逻辑结构可以采用任一种存储结构来存储(表示)。对于现实世界中的同一种数据,根据研究问题的角度不同,将会选用不同的逻辑结构: 对于一种逻辑结构,根据处理问题的

2、要求不同,将会选用不同的存储结构。对于复杂的数据结构,不论从逻辑层面上还是从存储层面上看,都可能包含有多个嵌 套层次。如假定一种数据结构包含有两个层次,第一层(顶层)的逻辑结构可能是树结构, 存储结构可能是链接结构:第二层(底层)的逻辑结构可能是线性结构,存储结构可能是 顺序结构。第一层结构就是数据的总体结构,第二层结构就是第一层中数据元素的结构。数据的逻辑结构通常采用二元组来描述,其中一元为数据元素的集合,另一元为元素 之间逻辑关系的集合,每一个逻辑关系是元素序偶的集合,如x,y就是一个序偶,其中x 为前驱,y为后继。当数据的逻辑结构存在着多个逻辑关系时,通常对每个关系分别进行 讨论。逻辑结

3、构的另一种描述方法是图形表示,图中每个结点表示元素,每条带箭头的连线 表示元素之间的前驱与后继的关系,其箭头一端为后继元素,另一端为前驱元素。数据的存储结构通常采用一种计算机语言中的数据类型来描述,通过建立数据存储结 构的算法来具体实现。数据的逻辑结构或存储结构也时常被简称为数据结构,读者可根据上下文来理解。下面通过例子来说明数据的逻辑结构。假定某校教务处的职员简表如表1.1所示。该表中共有10条记录,每条记录都由6个 数据项组成。此表整体上被看为一个数据,每个记录是这个数据中的数据元素。由于每条 记录的职工号各不相同,所以可把职工号作为记录的关键字,在下面构成的各种数据结构 中,将用记录的关

4、键字代表整个记录。表1.1教务处职员简表职工号姓 名性别出生日期职 务部 门01万明华男1962.03.20处长02赵宁男1968.06.14科长教材科03张利女1964.12.07科长考务科04赵书芳女1972.08.05主任办公室05刘永年男1959.08.15科员教材科06王明理女1975.04.01科员教材科07王敏女1972.06.28科员考务科08张才男1967.03.17科员考务科09马立仁男1975.10.12科员考务科10邢怀常男1976.07.05科员办公室【例1】一种数据结构的二元组表示为set=(KR),其中K=(01,02,03,04,05,06,07,08,09,1

5、0R=在数据结构set中,只存在有元素的集合,不存在有关系,或者说关系为空。这表明只 考虑表中的每条记录,不考虑它们之间的任何关系。把具有此种特点的数据结构称为集合 结构。集合结构中的元素可以任意排列,无任何次序。【例1.2】一种数据结构的二元组表示为lmeanty=(K,R),其中K=01,02,03,04,05,06,07,08,09,10R=(,r ,对应的图形表示如图1.1所示。图1.1数据的线性结构示意图结合表1,细心的读者不难看出:R是按职员年龄从大到小排列的关系。在数据结构Imeanty中,数据元素之间是有序的,每个数据元素有旦仅有一个直接前 驱元素(除结构中第一个元素05外),

6、有且仅有一个直接后继元素(除结构中最后一个元 素10外)。这种数据结构的特点是数据元素之间的1对1 (1 : 1)联系,即线性关系。我 们把具有这种特点的数据结构叫做线性结构。【例1.3】一种数据结构的二元组表示为tiee=(KR),其中K=(01f 02,03,04,05, 06, 07, 08,0 9, 10R=z ,f z , ,对应的图形表示如图1.2所示。图1.2数据的树结构示意图结合表1,细心的读者不难看出:R是职员之间领导与被领导的关系。图1.2像倒着画的一棵树,在这棵树中,最上面的一个没有前驱只有后继的结点叫做 树根结点,最下面一层的只有前驱没有后继的结点叫做树叶结点,除树根和

7、树叶之外的结 点叫做树枝结点。在一棵树中,每个结点有旦只有一个前驱结点(除树根结点外),但可以有任意多个 后继结点(树叶结点可看作为含0个后继结点)。这种数据结构的特点是数据元素之间的 1对N (1 : N)联系(N30),即层次关系,我们把具有这种特点的数据结构叫做树结构, 简称树。【例1.4】一种数据结构的二元组表示为giaph=(K,R),其中K=(01f02,03,04,05,06,07R=(z ,z , , ,对应的图形表示如图1.3所示。从图1.3可以看出,R是K上的对称关系。为了简化起见,我们把x,y)和y,x这 两个对称序偶用一个无序对(x,y)或(y,x)来代替;在示意图中,

8、我们把x结点和y结点 之间两条相反的有向边用一条无向边来代替。这样R关系可改写为:R=( (01,02), (01,04), (02, 03), (02,06), (02,07),(03, 07), (04,06), (05, 07) 对应的图形表示如图1.4所示。如果说R中每个序偶里的两个元素所代表的职员是好友的话,那么R关系就是人员之间的好友关系。图1.3数据的图结构示意图图1.4图1.3的等价表示从图1.3或1.4可以看出,结点之间的联系是M对N(M:N)联系(MNO, N0), 即网状关系。也就是说,每个结点可以有任意多个前驱结点和任意多个后继结点。我们把 具有这种特点的数据结构叫做图

9、结构,简称图。从图结构、树结构和线性结构的定义可知,树结构是图结构的特殊情况(即M=1的情 况),线性结构是树结构的特殊情况(即N=1的情况)o为了区别于线性结构,我们把树 结构和图结构统称为非线性结构。集合结构是整个数据结构中的一种特殊情况,其元素之间不存在任何关系。【例1.5】一种数据结构的二元组表示为B=(KR),其中K=(ki, ki, kaz ks, kR=(R1,R2 )Rl=(, 灯,k, k5, k, R2=k2, , , /5, k6若用实线表示关系R1,虚线表示关系R2,则对应的图形表示如图L5所示。图1.5带有两个关系的一种数据结构示意图从图1.5可以看出:数据结构B是图

10、结构。但是,若只考虑关系R1则为树结构,若只 考虑关系R2则为线性结构。下面简要讨论数据的存储结构。存储数据不仅要存储数据中的每个数据元素,而且要存储元素之间的逻辑关系。具体 地说,若数据是集合结构,则只需要存储所有数据元素,不需要存储它们之间的任何关系; 若数据是线性结构、树结构或图结构,则除了要存储所有数据元素外,还要相应存储元素 之间的线性关系、层次关系或网状关系。数据的存储结构分为顺序、链接、索引和散列4种。顺序存储对应一块连续的存储空间,该空间的大小要大于等于存储所有元素需占有的 存储空间的大小,存储元素之间的联系(即逻辑结构)通常不需要附加空间,而是通过元 素下标之间的对应关系反映

11、出来,只要简单的计算就可以得到一个元素的前驱或后继元素 的下标。顺序存储空间一般需要通过定义数组类型和数组对象来实现。在链接存储结构中,元素之间的逻辑关系通过存储结点之间的链接关系反映出来,每 个存储结点对应存储一个元素,同时存储该元素的前驱和后继元素所在结点的存储位置, 或者说同时存储指向其前驱元素结点和后继元素结点的指针,通过这些指针能够直接访问 到其前驱元素和后继元素。链接存储空间通过定义元素的存储结点类型和对象来实现,所 有存储结点可以占用连续的存储空间(即数组空间),也可以占用不连续的存储空间,此 空间是由动态分配的每个结点的空间形成的。索引存储是首先把所有数据元素按照一定的函数关系

12、划分成若干个子表,每个子表对 应一个索引项,然后采用一种存储结构存储所有子表的索引项和采用另一种存储结构存储 所有子表中的元素。如存储汉字字典时,需要采用索引存储,首先按偏旁部首划分所存汉 字为若干子表,得到偏旁部首表,对于每个部首再按所属汉字的笔画多少划分子表,得到 检字表,检字表中的每个汉字对应汉字解释表(即字典主体)中的一个条目;然后再分别 存储部首表、检字表和汉字解释表。这里检字表是汉字解释表的索引,而偏旁部首表又是 检字表的索引,它是汉字解释表的二级索引。当存储的数据量很大时,通常都需要采用索 引存储,并且时常使用多级索引。在索引存储中,各级索引表和主表(即数据元素表)通常都以文件的

13、形式保存在外存 磁盘上,访问任一数据元素时,都要根据该数据元素的特征依次访问各级索引表和最后访 问主表,存取外存的次数至少等于建立索引的级数加1。散列存储方法是按照数据元素的关键字通过一种函数变换直接得到该元素存储地址的 方法,该存储地址为相应数组空间中的下标位置。用于散列存储所有数据元素的相应数组 空间称为散列表。通过定义用于计算散列存储地址的函数和定义存储数据元素的散列表能 够实现散列存储结构。以上简要叙述了数据结构的有关概念,在以后的各专题中将会做深入和具体的讨论。1.2抽象数据类型抽象数据类型(Abstract Data Type, ADT)由一种数据结构和在该数据结构上的一组 操作所

14、组成。抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它 们为预定义数据类型。抽象数据类型通常由编程者定义,包括定义它所使用的数据、数据 结构以及所进行的操作。在定义抽象数据类型中的数据部分(含数据结构在内)和操作部 分时,可以只定义数据的逻辑结构和操作说明,不考虑具体的存储结构和操作的具体实现, 这样能够为用户提供一个简明的使用接I I,然后再另外给出具体的存储结构和操作的具体 实现,使得操作声明与实现分开,从而符合面向对象的程序设计思想。抽象数据类型在C+语言中是通过类类型来描述的,其数据部分通常定义为类的私有 或保护的数据成员,它只允许该类或派生类直接使用,操作部分通常定义为类的公共的成 员函数,它既可以提供给该类或派生类使用也可以提供给外部定义的类和函数使用。在本书中,为了便于叙述和分析数据结构和算法,使读者容易理解和接受,所以在实 现所定义的抽象数据类型时,把数据部分用一种己知的数据类型(如结构或数组等)来实 现,把操作部

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号