数据结构可以称为实例化的抽象数据类型吗?

时间:2015-02-01 01:03:37

标签: c++

我不清楚我在这里读到的有关ADTS和数据结构的内容,以及它们之间的区别在哪里。假设我有一个具有私有数据成员(数组)的类,并且我在其中有函数限制数据成员中的推送和弹出元素仅从顶部发生。这将是一个堆栈,一个特定的数据结构。但它也将是一个ADT:

“ADT是数据的集合和对该数据的一组操作。” (“使用C ++进行数据抽象和解决问题”,Carrano,第17页)。

但是既然维基百科称ADT为“纯理论实体”,那么上面的类是ADT实现,对象,数据结构吗?

4 个答案:

答案 0 :(得分:2)

没有。 “实例化抽象”本质上是一个矛盾。

答案 1 :(得分:0)

数据结构是任何种数据组织; ADT是一种特殊的(和使用)数据结构。

答案 2 :(得分:0)

嗯,有点儿。 ADT是一种描述,包括状态空间的描述,以及针对该状态空间定义的操作。因此,整数是一组状态,对应于您所代表的数字范围,以及操作加,减和乘。 (我们将忽略鸿沟,因为我们必须准确定义我们所指的整数除法。)

计算机程序中的整数确实是一个实例,它是一个具体的内存块和适当的代码来实现ADT。

Fred Brooks做了一个很好的区分,其中Int作为抽象是一个规范,Int ADT是一个实现,因为它完整地描述了确切的类型和代码(微代码,指令)实际上可以做添加等等是实现。不幸的是,除了Fred的前学生之外,这种区别并不常用。

答案 3 :(得分:0)

抽象数据类型被定义为一组行为和属性,对于该抽象数据类型的所有实现都是通用的。 .NET List数据类型有长度,对数据有数据和操作,如get front,get back,数据序列有序,...
一个std :: list<>是抽象数据类型列表的另一种实现 如果您在另一种编程语言中找到列表类型,您将能够从您对抽象数据类型列表的知识以及它们如何在其他语言中工作的情况下了解它的作用。

如果该语言的列表会开始在屏幕上绘制图片,那么您可以从系统中正确删除该语言;)

您可以考虑修复的许多抽象数据类型的语义。如列表,集合,堆栈,队列。相反,在集体接受抽象数据类型之前,语义可能会有所不同。

举个例子,如果你对抽象数据类型“模糊集”的定义进行民意调查,你很可能不会得到一个答案。

另一方面,如果您想对问题采取更多理论方法,您可能希望搜索“种类”的材料。例如,应用于要包含在该列表中的特定数据类型'a的通用List将被称为类型构造函数,因为它构造具体类型List<'a>当应用List<>时到'a,与List<>类型是一种更高级的类型。 (我当然希望我得到那个......)。然而,在这个问题上详细阐述这个问题超出了这个答案的范围。