抽象数据类型与数据类型和数据结构在面向对象编程中的区别

12

据我了解,数据结构实际上是一个蓝图,其中包含创建最终产品所需的所有信息,并且数据类型是该设计的物理实现或实现(类似于生物学中基因型和表型之间的区别)。

当涉及面向对象编程时,是否可以准确地说,抽象类接口是数据结构,因为它包含一组值和声明的行为,并且实现该抽象类或接口的是数据类型,因为它是这些行为的具体实现?

如果是这样,那么抽象数据类型(ADT)和数据类型之间的区别如何?它们真正不同,还是ADT只是俗称缩写“数据类型”?

我之所以问这个问题,是因为我发现这些术语在对话中经常互换使用,这让我想知道我的理解是否正确。

5个回答

6
我是一个相对新手,回答stackoverflow上的问题,也是对数据结构和数据类型讨论这种类型的问题比较陌生,但希望这可以帮到你。除了我所学的内容外,以下链接也对我有很大帮助:

“数据结构”和“数据类型”之间有什么区别?

解释一下数据*结构*和数据*类型*之间的区别。

http://cs.lmu.edu/~ray/notes/dtds/

首先,我将定义我对“implementation”一词的使用,因为似乎我可能会与您略有不同。我将实现定义为C ++中的实现文件。这种实现包含了某个接口的源代码。例如,单链表的实现是一堆包含数据的节点,其中起始节点指向下一个节点,直到最后一个节点指向某种空值。在这种意义上,我不能完全说一个数据类型是数据结构的物理实现。简化版本是数据结构实际上是一个或多个数据类型的物理实现。例如,栈是一种数据类型,而LinkedStack是实现栈的数据结构。虽然一个数据类型可以表示由上面的链接描述的所有可能的数据结构实例,但并非所有数据类型都必须如此。例如,int是一种数据类型,但说它是数据结构并不是最好的想法。
总结每个部分,请让我按照数据类型、抽象数据类型和数据结构的顺序进行。
数据类型或简称类型是根据其值和操作对数据进行分类的。例如,如果数据是42,那么42是int还是string?如果它是int,那它是什么int(它的值是多少)?它是正数还是负数?它有哪些操作?我能用它来除吗?从这个意义上说,数据类型纯粹取决于它们的外部行为。
现在,一些数据类型可能不指定任何实现方式,这些数据类型被称为抽象数据类型。基本上,如果用户无法访问或关心如何访问值和操作的实现方式,那么数据类型就是抽象数据类型。例如,ints是抽象数据类型,因为程序员不需要知道也可能不关心ints的工作原理或如何添加ints。然而,该程序员仍然可以使用ints,添加内容。不透露其实现方式的用户制定的数据类型也将是抽象数据类型。因此,许多数据类型都是抽象数据类型。此外,抽象数据类型可以模拟类似的数据类型和数据结构,并由特定的数据类型和数据结构实现,如上面的链接所描述的。
最后,数据结构是有效存储数据的方式,它们与实现有关。例如,单向链表和双向链表是不同的数据结构,因为它们具有不同的实现方式。单向链表只能向前移动,而双向链表可以向前和向后移动。我已经描述了单向链表的实现方式,而简单来说,双向链表的实现方式与单向链表的实现方式相同,但每个节点还会有一个指向每个前一个节点的指针,以允许双向链表向后移动。数据结构的要点在于数据结构的实现方式(数据如何组织/存储)是其区别所在。
如果您想了解双向链表相对于单向链表的效率优势,这些链接很好:什么情况下双向链表比单向链表更高效?

https://social.msdn.microsoft.com/Forums/vstudio/en-US/270bebdb-9032-4fc1-97c6-bc017d7e0a45/when-to-use-single-linked-list-and-when-to-use-double-linked-list?forum=csharpgeneral

否则,希望我能对你有所帮助,祝你好运。

你能用简单的话解释一下抽象数据类型和数据类型之间的区别吗?我有点困惑。 - Suraj Jain

4

抽象数据类型

  • 定义行为和状态管理的契约协议
  • 抽象数据类型只在概念上存在。它们在语言环境中没有具体存在。这就是为什么维基百科特别将其称为“数学模型”的原因。

数据结构

  • 抽象数据类型所定义的协议的类级实现。

  • 数据结构以组成您类定义的代码形式存在。

数据类型

  • 类的具体实例

  • 数据类型以从您定义的类创建的对象的形式存在。

示例

  • 优先队列是一种抽象数据类型,可以使用二叉堆数据结构实现。

  • 列表是一种抽象数据类型,可以使用数组或链表数据结构实现。

简短总结

抽象数据类型>数据结构>数据类型


1
你能举一个数据类型的例子吗? - Suraj Jain
var arr = [1,2,3]; - chopper draw lion4

0
一种解释位模式的方法称为数据类型。有几种数据类型,例如二进制整数、二进制编码十进制、非负整数、实数和字符串。例如:一个位字符串00100110可以被解释为数字“38”(二进制编码十进制)。
如果我们对数据结构进行某些特定操作,则具有这些特定操作的数据结构称为抽象数据类型。它是指定数据类型的逻辑属性和操作的工具。
数据结构是抽象操作的实现。
-来源:书籍、谷歌搜索...

0
据我所知,例如在Python中,intfloatbool是数据类型,它们是内置类。而strlisttupledictsetfrozenset等则是数据结构,它们也是内置类。我们可以编写linked listlinked stacklinked queuelinked dequepositional listarray stackarray queuelinked treelinked binary treebinary search treeAVL treered black treesplay treehash tablepriority queue等等,我们可以称这些为数据结构或ADT。在我看来,数据结构/ADT是用于组织数据的,而数据类型则是将数据分类为int/float/bool等。
Python内置的list是使用动态数组实现的,Python内置的tuple是使用静态数组实现的,Python内置的dict/set/frozenset则是使用哈希表实现的。

0

数据是原始、未经处理(可能的)信息,需要通过计算机进行计算。
例如- 您的考试成绩,您暗恋的人姓名

数据类型用于定义某些“领域”和(因此)数据上的操作。
例如- 整数、二进制、字符

抽象数据类型用于定义某种“行为”和(因此)数据的组织方式。
例如- 堆栈、队列、向量

数据结构是具体数据的结构,定义了其领域和行为。
例如- vector<int> marks, vector<string> name_crush


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接