抽象数据类型 (ADT) 的表示法
抽象数据类型可以定义为一个数学模型
在其上定义的操作集合。一个简单的例子是集合
整数以及联合、交集定义的操作
在片场。
ADT 是原始数据类型(整数、字符
等),它们封装了一种数据类型,即定义
类型和对该类型的所有操作都本地化到一个部分
的程序。它们被视为外部的原始数据类型
ADT 及其操作的定义部分。
ADT 的实现是将以下语句转换为
定义变量的声明的编程语言
属于那个ADT,加上每个用那种语言的程序
ADT 的操作。 ADT 的实现选择了一个
表示ADT的数据结构。
指定数据类型的逻辑属性的有用工具是
抽象数据类型。从根本上说,数据类型是一个集合
值和对这些值的一组操作。那个收藏和
这些操作形成了一个可以实现的数学结构
使用特定的硬件和软件数据结构。术语
“抽象数据类型”是指定义数据类型的基本数学概念。
在将抽象数据类型定义为数学概念时,我们不是
关注空间或时间效率。这些是实施
问题。事实上,ADT的定义并不关心
实现细节。甚至可能无法实施
特定硬件上的特定 ADT 或使用
特定的软件系统。例如,我们已经看到一个
ADT 整数并非普遍可实现。
为了说明 ADT 的概念和我的规范方法,
考虑对应于数学的 ADT RATIONAL
有理数的概念。有理数是可以
表示为两个整数的商。上的操作
我们定义的有理数是有理数的创建
从两个整数,加法,乘法和相等性测试。
以下是该ADT的初始规范。
/* Value defination */
abstract typedef <integer, integer> RATIONAL;
condition RATIONAL [1]!=0;
/*Operator defination*/
abstract RATIONAL makerational (a,b)
int a,b;
preconditon b!=0;
postcondition makerational [0] =a;
makerational [1] =b;
abstract RATIONAL add [a,b]
RATIONAL a,b;
postcondition add[1] = = a[1] * b[1]
add[0] = a[0]*b[1]+b[0]*a[1]
abstract RATIONAL mult [a, b]
RATIONAL a,b;
postcondition mult[0] = = a[0]*b[a]
mult[1] = = a[1]*b[1]
abstract equal (a,b)
RATIONAL a,b;
postcondition equal = = |a[0] * b[1] = = b[0] * a[1];
一个ADT由两部分组成:-
1) 值定义
2) 操作定义
1) 值定义:-
值定义定义了 ADT 的值集合和
由两部分组成:
1) 定义条款
2) 条件条款
例如,ADT RATIONAL 的值定义指出
RATIONAL 值由两个整数组成,其中第二个整数
不等于 0。
关键字abstract typedef引入了一个值定义和
关键字条件用于指定新的任何条件
定义的数据类型。在此定义中,条件指定
分母可能不为 0。定义子句是必需的,但
可能并非每个 ADT 都需要条件。
2) 运算符定义:-
每个运算符都被定义为一个包含三个部分的抽象连接。
1)标题
2)可选的前提条件
3)可选的后置条件
例如,ADT RATIONAL 的运算符定义包括
创造(制造)、加法(add)和
乘法 (mult) 以及相等性测试 (equal)。让我们
首先考虑乘法的规范,因为它是
最简单的。它包含标题和后置条件,但没有
前置条件。
abstract RATIONAL mult [a,b]
RATIONAL a,b;
postcondition mult[0] = a[0]*b[0]
mult[1] = a[1]*b[1]
这个定义的表头是前两行,刚好
就像一个 C 函数头。关键字abstract表示它是
不是 C 函数,而是 ADT 运算符定义。
后置条件指定操作的作用。在一个
后置条件,使用函数的名称(在本例中为 mult)
来表示操作的结果。因此,mult [0] 表示
结果的分子和 mult 1 表示结果的分母
结果。也就是说,它指定了什么条件在
执行操作。在此示例中,后置条件指定
有理乘法结果的分子等于
两个输入的分子与分母的整数乘积
等于两个分母的整数乘积。
列表
在计算机科学中,列表或序列是一种抽象数据类型,
表示可数个有序值,其中相同的值
可能发生不止一次。列表的一个实例是一台计算机
表示有限序列的数学概念;这
(可能)列表的无限模拟是流。列表是基本的
容器的示例,因为它们包含其他值。如果相同的值
出现多次,每次出现都被认为是一个不同的项目
名称列表也用于几个具体的数据结构
可用于实现抽象列表,尤其是链表。
列表的图像
包
包是对象的集合,您可以在其中不断添加对象
袋子,但一旦添加到袋子中,您就无法将它们移除。所以用一个
bag数据结构,可以收集所有对象,然后迭代
通过他们。当你用 Java 编程时,你会正常打包。
包的图片
收藏
Java 意义上的集合是指任何实现
采集界面。一般意义上的集合只是一个组
对象。
收藏图片