关于面向对象编程,抽象数据类型与数据类型对数据结构

时间:2014-07-01 16:48:24

标签: oop data-structures types abstract-data-type

据我所知,数据结构本质上是一个蓝图,其中包含根据其规范创建最终产品所需的所有信息,而数据类型是该设计的物理实现或实现(非常类似于差异在基因型和表型之间,来自生物学。)

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

如果是这种情况,那么抽象数据类型(ADT)和数据类型之间的区别又如何呢?它们是真正独特的,还是ADT只是通俗地缩短为数据类型'?

我问这个是因为在我看来这些术语在对话中经常互换使用,这让我想知道我的理解是不正确的。

4 个答案:

答案 0 :(得分:4)

我对回答stackoverflow和这种数据结构与数据类型的讨论相当新,但希望这会有所帮助。除了我所教过的内容之外,这些链接为我做了很多工作:

Is there a difference between 'data structure' and 'data type'?

Explain the difference between a data *structure* and a data *type*

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

首先,我将定义我对“实现”这个词的用法,因为看起来我可能会使用它与你的略有不同。我定义了像C ++中的实现文件一样的实现。这种实现包含某些接口如何工作的源代码。例如,单链表的实现是一堆节点,每个节点包含具有指向下一节点的起始节点的数据,直到最后一个节点指向某种类型的空。从这个意义上说,我不能说数据类型是数据结构的物理实现。简化版本是数据结构实际上是一种或多种数据类型的物理实现。例如,堆栈是数据类型,而LinkedStack是实现堆栈的数据结构。虽然数据类型可以表示上述链接所描述的数据结构的所有可能实例,但并非所有数据类型都必须这样。例如,int是一种数据类型,但说它是一种数据结构并不是最好的主意。

总结一下,请按照数据类型,抽象数据类型和数据结构的顺序进行。

数据类型或类型用于通过其值和操作对数据进行简短分类。例如,如果数据是42,那么42是int还是字符串?如果它是一个int,它是什么int(它的值是什么)?是正面还是负面?它有什么样的操作?我可以分开吗?从这个意义上说,数据类型完全取决于它们的外部行为。

现在,某些数据类型可能未指定任何类型的实现,这些数据类型称为抽象数据类型。基本上,如果用户无法访问或关心如何实现值和操作,则数据类型是抽象数据类型。例如,int是抽象数据类型,因为程序员不需要知道并且可能不关心如何使用int或如何添加int。然而,程序员仍然可以使用整数,添加他/她的内容。用户制作的数据类型不显示其实现也将是抽象数据类型。因此,许多数据类型都是抽象数据类型。此外,抽象数据类型可以对类似的数据类型和数据结构进行建模,并通过上述链接描述的特定数据类型和数据结构来实现。

最后,数据结构是有效存储数据的方法,它们都是关于实现的。例如,单链表和双链表是不同的数据结构,因为它们具有不同的实现。单个链接列表仅前进,而双链接列表可前进和后退。我描述了上面单链表的实现,简而言之,双链表的实现与单链表的实现相同,但每个节点也有一个指向每个前一节点的指针,以允许双链表返回。数据结构的要点是数据结构的实现(如何组织/存储数据)是如何区分的。

如果你想要一个效率双重链接列表的例子超过单链表,这些链接很好:

When is doubly linked list more efficient than singly linked list?

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

否则,希望我有一些用处,祝你好运。

答案 1 :(得分:3)

摘要数据类型

  • 定义行为和州管理的合同协议
  • 抽象数据类型仅在概念上存在。它们在语言的背景下没有具体的存在。这就是为什么维基百科特别将其称为mathematical model

数据结构

  • 由抽象数据类型定义的合同的类级实现。

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

数据类型

  • 类的具体实例

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

实施例

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

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

TLDR

摘要数据类型&gt; <数据结构>数据类型

答案 2 :(得分:0)

解释位模式的方法称为数据类型。有几种数据类型,如二进制整数,二进制编码的十进制,非负整数,实数和字符串。例如:位字符串00100110可以解释为数字'38'(二进制编码的十进制)。

如果我们使用数据结构进行某些特定操作,那么具有这些特定操作的数据结构称为抽象数据类型。它是一种用于指定逻辑属性和数据类型操作的工具。

数据结构是抽象操作的实现。

-source:books,google search ....

答案 3 :(得分:0)

据我所知,例如,在Python中,int float bool是数据类型,它们是内置类,str list tuple dict set frozenset是数据结构,它们也是内置类,我们可以编写linked list linked stack {{1} } linked queue linked deque positional list array stack array queue linked tree linked binary tree binary search tree AVL tree {{1} } red black tree splay tree等我们可以调用这些数据结构,或ADT,在我看来,数据结构/ ADT是组织数据,数据类型是将数据分类为int / float / bool /等等 Python内置hash table用动态数组实现,Python内置priority queue用静态数组实现,Python内置``dict / set / frozrnset用哈希表实现