【问题标题】:Is there a difference between 'data structure' and 'data type'?“数据结构”和“数据类型”之间有区别吗?
【发布时间】:2013-09-22 06:15:51
【问题描述】:

在我学习的大学考试中经常出现的两个问题是:

  • 定义数据类型。分类和解释数据类型
  • 定义数据结构。分类和解释数据结构
  • 不知何故,它们不是一回事吗?
    假设您正在 Java 中创建 Tree<E>。你会为Tree<E> 声明你的类,向它添加方法,然后在某个地方你会做Tree<String> myTree = new Tree<>(); 来创建一个树对象。

    您的数据“结构”现在是数据“类型”。
    假设您被问到一个问题:myTree 是什么类型的变量?答案是Tree<E>。您的数据“结构”现在是数据“类型”。

    现在,由于它们是相同的,因此它们将根据您要对其进行分类的基础以相同的方式进行分类。原始或非原始。同质或异质。线性或分层。

    这是我的理解。是不是理解错了?

    【问题讨论】:

    • 类型可以是int,不一定有“结构”。实际上,类型系统是一种错误检查系统,与“数据结构”根本没有太大关系。
    • 如果您觉得满意,请接受答案。 :)

    标签: language-agnostic


    【解决方案1】:

    我想更正以下开始 - 您创建了一个名为“Tree”的和一个名为“myTree”的对象,而不是一个变量 称为 datatype “树”的“myTree”。这些是不同的东西。

    以下是数据类型的定义:

    数据类型或简称类型是识别各种数据类型之一的分类, 例如实值、整数或布尔值,用于确定该类型的可能值; 可以对该类型的值执行的操作;数据的含义; 以及该类型值的存储方式。

    现在,as per Wikipedia,数据类型中的“类型”有多种定义。

    你问的问题很好。在当今的现代语言中有一些数据类型,简称为 抽象数据类型 或 ADT。 ADT 的定义是:

    抽象数据类型 (ADT) 是具有相似行为的某一类数据结构的数学模型;或者对于具有相似语义的一种或多种编程语言的某些数据类型。抽象数据类型是间接定义的,仅由可能对其执行的操作以及对这些操作的效果(以及可能的成本)的数学约束来定义。

    还写到:

    抽象数据类型是纯粹的理论实体,用于(除其他外)简化抽象算法的描述、分类和评估数据结构以及正式描述编程语言的类型系统。但是,ADT 可以通过特定的数据类型或数据结构以多种方式和多种编程语言实现;或以正式的规范语言描述。

    这意味着 ADT 可以使用数据类型或数据结构来实现。

    至于数据结构

    数据结构是一种在计算机中存储和组织数据的特殊方式,以便可以有效地使用它。

    许多教科书,可以互换使用这些词。对于更复杂的类型,这可能会导致混淆。

    举个小例子:使用 b-tree 实现数据库是一种标准。这意味着,我们知道这种类型的 ADT 非常适合这种类型的问题,并且可以更有效地处理它。但是为了在 ADT 中注入这种有效性,您需要创建一个数据结构来为您提供所需的输出。

    另一个例子:有很多树,比如b-tree、二叉搜索树、AA树等。所有这些本质上都是树的类型,但每一棵树都有自己的数据结构。

    请参阅:List of data structures 以获取大量可用结构。

    【讨论】:

    • we know that this type of ADT。我很困惑,B-tree 是 ADT 还是数据结构? wikipedia 说它是一个数据结构,但你似乎暗示它是一个 ADT?我猜你可以说 B-trees 是数据结构,Trees 是 ADT?
    【解决方案2】:

    区别在于抽象具体数据结构。一些 CS 教科书将抽象数据结构称为“数据类型”,这很容易混淆,因为并非所有数据类型都是数据结构。他们使用“数据结构”来特指具体的数据结构。

    抽象数据结构,也称为抽象数据类型,是数据结构的接口。 Java 经常使用接口来表示它们;例如ListQueueMapDequeSet。 (但还有其他一些没有用 Java 表示的,例如包/多重集、多重映射、图形、堆栈和优先级队列。)它们的区别在于它们的行为和使用数据结构的方式。例如,集合的特点是禁止重复而不记录顺序,而列表允许重复并记住顺序。队列有一个受限接口,只能让您添加到一端并从另一端移除。

    具体的数据结构是抽象数据结构的实现。例如ArrayListLinkedList。这些都是列表的实现;尽管它们的列表界面相同,但程序员可能仍然关心它们不同的性能特征。注意LinkedList 也实现了Queue

    【讨论】:

      【解决方案3】:

      此外,编程语言中存在没有类型系统的数据结构。例如,您可以在 LISP 中为 Map 建模,或者在 Python 中创建字典。在这里谈论类型会产生误导,因为 type 恕我直言,仅对某些类型系统有意义,或者作为一个抽象概念,如“存在于 t 中的所有值的集合”。

      所以,data structure 似乎具有某种抽象类型的具体实现的内涵。如果我们在具有类型系统 OTOH 的编程语言中谈论某个对象,我们可能会说“它具有 XY 类型”。

      【讨论】:

      • Python 当然有一个类型系统。每个值都有一个类型。当然,Python 标识符可以被赋予任何类型的值。
      猜你喜欢
      • 2011-06-05
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 2014-09-06
      相关资源
      最近更新 更多