据我所知,数据结构本质上是一个蓝图,其中包含根据其规范创建最终产品所需的所有信息,而数据类型是该设计的物理实现或实现(非常类似于差异在基因型和表型之间,来自生物学。)
当谈到面向对象的面向编程时,可以准确地说抽象类或接口是一个数据结构,因为它包含一组值和声明的行为,以及实现该抽象类或接口的类是一种数据类型,因为它是这些行为的具体表现形式?
如果是这种情况,那么抽象数据类型(ADT)和数据类型之间的区别又如何呢?它们是真正独特的,还是ADT只是通俗地缩短为数据类型'?
我问这个是因为在我看来这些术语在对话中经常互换使用,这让我想知道我的理解是不正确的。
答案 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?
否则,希望我有一些用处,祝你好运。
答案 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用哈希表实现