抽象数据类型 (ADT) 的表示法
抽象数据类型可以定义为一个数学模型,其中定义了一组操作。一个简单的例子是整数的集合以及集合上定义的并集、交集的操作。
ADT 是原始数据类型(整数、字符等)的概括,它们封装了一种数据类型,即类型的定义和对该类型的所有操作都本地化到程序的一个部分。它们在定义ADT及其操作的部分之外被视为原始数据类型。
ADT的实现是将声明定义为该ADT的变量的声明的编程语言语句的翻译,以及该ADT的每个操作的该语言的过程。ADT 的实现选择了一个数据结构来表示ADT。
指定数据类型的逻辑属性的一个有用工具是抽象数据类型。从根本上说,数据类型是值的集合和对这些值的一组操作。该集合和那些操作形成一个数学结构,可以使用特定的硬件和软件数据结构来实现。术语
“抽象数据类型”是指定义数据类型的基本数学概念。
在将抽象数据类型定义为数学概念时,我们不关心空间或时间效率。这些是实施问题。事实上,ADT的定义根本不关心实现细节。甚至不可能在特定的硬件或使用特定的软件系统上实现特定的ADT 。例如,我们已经看到
ADT 整数不是普遍可实现的。
为了说明ADT的概念和我的规范方法,请考虑对应于有理数的数学概念的ADT RATIONAL 。有理数是可以表示为两个整数的商的数。我们定义的有理数运算是从两个整数创建一个有理数、加法、乘法和相等性检验。以下是此ADT的初始规范。
/* Value defination */
abstract typedef
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 引入了一个值定义,关键字 condition 用于指定新定义的数据类型的任何条件。在此定义中,条件指定分母可能不为 0。定义子句是必需的,但条件可能并非对每个ADT都是必需的。
2) 运算符定义:-
每个运算符都被定义为具有三个部分的抽象连接。
1)标题
2)可选的前提条件
3)可选的后置条件
例如,ADT RATIONAL 的运算符定义包括创建 (makerational)、加法 (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 意义上的集合是指实现 Collection 接口的任何类。一般意义上的集合只是一组对象。
收藏图片