什么是ADT?抽象数据类型详解!

Steven 2021-08-19 16:08:44 浏览数 (17353)
反馈

很多小伙伴在翻开数据结构的第一节课,听到的就是一个名为抽象数据类型(Abstract Data Type,ADT)的概念,而有些教材对这个概念的介绍过于书面化,今天小编就来简单的用比较轻松的方式来介绍一下这个概念吧。

来自课本的介绍(内容截取自百度百科相关词条)

抽象数据类型( ADT,Abstract Data Type)是指一个数学模型以及定义在此数学模型上的一组操作。它通常是对数据的某种抽象,定义了数据的取值范围及其结构形式,以及对数据操作的集合。以复数为例,它的抽象数据类型如下:

ADT complex{
数据对象:D={real, image | real∈实数, image∈实数} [3] 
数据关系:R={<real,image>} [3] 
基本操作: [3] 
InitComplex(&C)
操作结果:构造一个复数。
GetReal(C, &real)
初始条件:复数C存在。
操作结果:用real返回复数C的实部。
GetImage(C, &image)
初始条件:复数C存在。
操作结果:用image返回复数C的虚部。
OutputComplex(C)
初始条件:复数C存在。
操作结果:输出复数C的值。
Add(C1,C2,&C)
初始条件:复数C1,C2存在。
操作结果:用复数C返回复数C1,C2的和。
Sub(C1,C2,&C)
初始条件:复数C1,C2存在。
操作结果:用复数C返回复数C1,C2的差。
Mul(C1,C2,&C)
初始条件:复数C1,C2存在。
操作结果:用复数C返回复数C1,C2的乘积。
Div(C1,C2,&C)
初始条件:复数C1,C2存在。
操作结果:用复数C返回复数C1除以C2的值。
}ADT Complex 

小编的介绍

看到上面的抽象数据类型,是不是感觉很抽象?实际上ADT就介绍了三件事情:数据本身,数据与数据之间的关系,以及你能对这些数据进行的操作。以我们的理解,复数的抽象数据类型里面的内容,也就是一个复数应该怎么组成,根据复数的相关知识,我们知道复数有实部和虚部组成,虚部由一个有理数*i组成,所以一个复数应该有存储一个实部的数据,一个虚部的数据,这也就对应了上面ADT中数据对象的内容,这就是数据本身。

我们知道一个复数的抽象数据类型中有两个数,一个是实部,一个是虚部,那么实部和虚部的数据有什么关系呢?就是上面的那种关系,也就是实部和虚部组合成一个复数。

关于复数的操作,我们定义在基本操作中,比如我们需要这个数据结构能够查看实部,查看虚部,复数运算等,都可以定义在这里。

有了这样的一个抽象数据类型,我们就可以知道怎么去实现一个复数对象,以及这个复数对象需要哪些操作了。(实际上ADT中的操作可以不用全部实现,这样可以减少自己的开发量也可以减少代码量,不过这样的数据结构只能专属于这个代码,并不能通用)

 如果小伙伴有接触过面向对象的相关概念,你会发现ADT和对象具有很高的相似之处,比如他们都有属性(数据对象)和对属性操作的方法(基本操作),ADT中多了数据与数据之间的关系,但这个在对象中也可以进行定义。

小结

以上就是ADT全部内容了,十分遗憾的是关于数据结构和算法的内容本站并没有收录相关手册,不过本站的技术头条内有很多算法相关的文章,小编也会继续给小伙伴分享数据结构相关的知识,希望小伙伴们继续关注W3Cschool后续文章!


0 人点赞