【问题标题】:Abstract data type vs Data Type vs Data Structure, with respect to object-oriented programming关于面向对象编程的抽象数据类型 vs 数据类型 vs 数据结构
【发布时间】:2014-08-22 07:44:48
【问题描述】:

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

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

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

我之所以这么问,是因为在我看来,这些术语在对话中经常可以互换使用,这让我怀疑我的理解是否不正确。

【问题讨论】:

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


    【解决方案1】:

    我对回答 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 还是 string?如果它是一个 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

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

    【讨论】:

    • 你能用更简单的语言区分adt和数据类型吗?我有点困惑
    【解决方案2】:

    抽象数据类型

    • 定义行为和状态管理的合同协议
    • 抽象数据类型仅在概念上存在。它们在语言的语境中没有具体的存在。这就是为什么 Wikipedia 将其专门称为 mathematical model

    数据结构

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

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

    数据类型

    • 类的具体实例

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

    例子

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

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

    TLDR

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

    【讨论】:

    • 你能举个数据类型的例子吗?
    • var arr = [1,2,3];
    【解决方案3】:

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

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

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

    -来源:书籍,谷歌搜索....

    【讨论】:

      【解决方案4】:

      据我所知,例如,在 Python 中,int float bool 是数据类型,它们是内置类,str list tuple dict set @ 987654329@是数据结构,它们也是内置类,我们可以写成linked listlinked stacklinked queuelinked dequelinked dequepositional listarray stackarray queuelinked tree9876539@8linked tree9876539@34 @red black treesplay treehash tablepriority queue等等,我们可以称这些数据结构,或者ADT,在我看来,数据结构/ADT是对数据进行组织,数据类型是将数据分类成int/float/布尔/等 Python内置list用动态数组实现,Python内置tuple用静态数组实现,Python内置`dict/set/frozrnset用哈希表实现

      【讨论】:

        猜你喜欢
        • 2021-11-13
        • 1970-01-01
        • 1970-01-01
        • 2019-03-12
        • 1970-01-01
        • 1970-01-01
        • 2015-10-20
        • 2020-05-05
        • 2023-04-11
        相关资源
        最近更新 更多