我目前正在研究抽象数据类型(ADT),但我根本没有得到这个概念。有人可以向我解释这实际上是什么吗?什么是收藏,包和List ADT?简单来说?
答案 0 :(得分:62)
抽象数据类型(ADT)是一种数据类型,其中只定义行为但不实现。
ADT的反面是具体数据类型(CDT),其中包含ADT的实现。
<强>示例:强>
Array, List, Map, Queue, Set, Stack, Table, Tree, and Vector
是ADT。这些ADT中的每一个都具有许多实现,即CDT。容器是高于所有ADT的高级ADT。
现实生活中的例子:
书是摘要(电话簿是一种实现)
答案 1 :(得分:15)
Abstact data type维基百科的文章有很多话要说。
在计算机科学中,抽象数据类型(ADT)是具有相似行为的某类数据结构的数学模型;或者对于具有类似语义的一种或多种编程语言的某些数据类型。抽象数据类型是间接定义的,只能通过可能对其执行的操作以及对这些操作的影响(以及可能的成本)的数学约束来定义。
稍微具体而言,您可以将Java的List
接口作为示例。界面根本没有明确定义任何行为,因为没有具体的List
类。该接口仅定义了一组方法,其他类(例如ArrayList
和LinkedList
)必须实现这些方法才能被视为List
。
集合是另一种抽象数据类型。对于Java的Collection
接口,它比List
更抽象,因为
List
界面在Collection
,iterator
,add
,{的合同上添加了除remove
界面中指定的附加规定之外的其他规定{1}}和equals
方法。
包也称为multiset。
在数学中,multiset(或bag)的概念是对集合概念的概括,其中允许成员不止一次出现。例如,有一个唯一的集合包含元素a和b而没有其他元素,但是有许多具有此属性的多集合,例如包含两个副本a和一个b的多集合或包含三个副本的多个集合a和b。
在Java中,Bag将是一个实现非常简单的界面的集合。您只需要能够将项目添加到包中,检查其大小,并迭代它包含的项目。有关示例实现,请参阅Bag.java(来自Sedgewick&amp; Wayne的Algorithms 4th edition)。
答案 2 :(得分:3)
真正抽象的数据类型描述其实例的属性,而不承诺其表示或特定操作。例如,抽象(数学)类型Integer是一组离散的,无限的,线性排序的实例。具体类型为实例提供特定表示,并实现一组特定的操作。
答案 3 :(得分:2)
Brilliant's wiki 上给出的最简单的解释之一:
<块引用>抽象数据类型,通常缩写为 ADT,是一种 根据使用方式和数据结构对数据结构进行分类 他们提供的行为。他们没有指定数据结构如何 必须在内存中实现或布局,但只需提供一个 最小的预期界面和行为集。例如,一个堆栈 是一种抽象数据类型,它指定了一个线性数据结构 LIFO(后进先出)行为。堆栈通常实现 使用数组或链表,但是一个不必要的复杂 使用二叉搜索树的实现仍然是有效的 执行。需要明确的是,说堆栈是不正确的 数组,反之亦然。数组可以用作堆栈。同样,一个 堆栈可以使用数组来实现。
由于抽象数据类型不指定实现,这意味着 谈论给定的时间复杂度也是不正确的 抽象数据类型。关联数组可能有也可能没有 O(1) 平均搜索次数。由一个关联数组实现 哈希表确实有 O(1) 平均搜索时间。
ADT 示例:List - 可以使用 Array 和 LinkedList、Queue、Deque、Stack、Associative array、Set 来实现。
答案 4 :(得分:2)
实际上抽象数据类型是:
例如,让我们看一些抽象数据类型的规范,
答案 5 :(得分:1)
ADT是一组数据值和相关操作,它们完全独立于任何特定实现。 ADT的强度是对用户隐藏的实现。只声明了接口。这意味着ADT有多种方式
答案 6 :(得分:1)
在定义抽象数据类型之前,让我们考虑不同的 查看系统定义的数据类型。我们都知道默认情况下全部 原始数据类型(int,float等)支持基本操作 作为加法和减法。系统提供实现 对于原始数据类型。对于用户定义的数据类型,我们也是 需要定义操作。这些操作的实现可以 当我们想要实际使用它们时完成。这意味着一般来说, 用户定义的数据类型及其操作定义。
为了简化解决问题的过程,我们将数据结合起来 结构与他们的操作,我们称之为“抽象数据 输入“。(ADT's)。
常用 ADT'S 包括:链接列表,堆栈,队列,二叉树, 字典,不相交集(联合和查找),哈希表和许多 其他
ADT的包含两种类型:
<强> 1。数据声明。
<强> 2。操作声明。
答案 7 :(得分:1)
在编程语言中,类型是一些数据和相关的操作。 ADT是用户定义的数据聚合和对这些数据的操作,其特征在于封装,数据和操作在单个语法单元中表示或列表声明,并且信息隐藏,只有ADT用户可以看到相关操作,ADT 接口,与编程语言中的普通数据类型相同。这是一个抽象,因为数据的内部表示和操作的实现与ADT用户无关。
答案 8 :(得分:1)
Abstract数据类型是一个包含各种操作数据的数学模块。实现细节是隐藏的,这就是为什么它被称为抽象。抽象允许您通过关注数据和操作的逻辑属性来组织任务的复杂性。
答案 9 :(得分:0)
抽象数据类型类似于用户定义的数据类型,我们可以在其上执行函数,而无需知道数据类型中的内容以及如何对它们执行操作。由于信息没有暴露其抽象。例如。列表,数组,堆栈,队列。在Stack上我们可以执行Push,Pop这样的功能,但我们不确定它是如何在幕后实现的。
答案 10 :(得分:0)
为了解决问题,我们将数据结构与其操作相结合。 ADT由两部分组成:
常用的ADT是链接列表,堆栈,队列,优先级队列,树木等。在定义ADT时,我们不必担心实现断言。只有当我们想要使用它们时才会出现。
答案 11 :(得分:0)
抽象数据类型是值的集合以及对这些值的任何类型的操作。例如,由于String不是原始数据类型,因此我们可以将其包含在抽象数据类型中。
答案 12 :(得分:0)
简单来说:抽象数据类型是处理该数据的数据和操作的集合。这些操作都将数据描述到程序的其余部分,并允许程序的其余部分更改数据。松散地使用“抽象数据类型”中的“数据”一词。 ADT可能是一个图形窗口,包含影响它的所有操作,文件和文件操作,保险费率表及其上的操作或其他内容。
来自代码完成2本书
答案 13 :(得分:0)
ADT是一种数据类型,其中数据收集和对该数据进行操作。它着重于概念而非实现。 由您决定使用哪种语言使其在地球上可见 例: 堆栈是ADT,而数组不是 Stack是ADT,因为我们可以用多种语言实现它, python c c ++ java等,而Array内置于数据类型
答案 14 :(得分:0)
抽象数据类型(有时缩写为ADT)是对我们如何查看数据和所允许的操作的逻辑描述,而与它们的实现方式无关。这意味着我们只关心数据所代表的内容,而不关心数据的最终构造方式。
答案 15 :(得分:0)
简单抽象数据类型只是一组操作,数据集用于在机器中有效地存储其他一些数据。 不需要任何特定类型的声明。 它只需要实现ADT。
答案 16 :(得分:0)
抽象只给你信息(服务信息)而不是实现。 例如:当您从 ATM 机取款时,您只知道一件事,即将您的 ATM 卡放在机器上,单击取款选项,输入金额,如果有钱,您的钱就出来了。 这只是您对 ATM 机的了解。但是你知道你是怎么收钱的吗??背后是什么业务逻辑?正在调用哪个数据库?正在调用哪个位置的哪个服务器?不,您只知道服务信息,即您可以取款。这是一个抽象。
同样,ADT 为您提供了数据类型的概述:它们是什么/可以存储以及您可以对这些数据类型执行哪些操作。但它没有提供如何实现它。这是ADT。它只定义数据类型的逻辑形式。
另一个比喻是: 在汽车或自行车中,您只有在踩下刹车时才知道车辆会停下来。但是你知道踩刹车时自行车是怎么停下来的吗???不,意味着实施细节被隐藏。你只知道踩下刹车时会做什么,但不知道它是怎么做的。
答案 17 :(得分:-1)
术语数据类型是特定变量可以保存的数据类型-它可以是整数,字符,浮点数或任何范围的简单数据存储表示形式。但是,在构建面向对象的系统时,我们使用其他数据类型(称为抽象数据类型)来表示更现实的实体。
例如:我们可能对表示“银行帐户”数据类型感兴趣,该数据类型描述了程序中所有银行帐户的处理方式。抽象是关于降低复杂性,忽略不必要的细节。