【问题标题】:Abstract and Primitive Data Types (ADT)抽象和原始数据类型 (ADT)
【发布时间】:2015-09-26 17:51:35
【问题描述】:

我知道这个问题已经被问过一百万次了,但是有人可以向我解释一下 ADT 的确切含义(如果可能的话,用外行的话)?

我阅读了 ADT 的定义 - ADT 只提到了要执行的操作,但没有提到这些操作将如何实现。 原始数据类型也是如此。

假设如果我们有一个浮点数据类型,我们知道可以执行乘法、除法等操作(因此我们知道将执行哪些操作)但我们不知道它是如何执行的'将被执行(在乘法的情况下,我们可以只是乘法或重复加法,所以我们有两个过程给出相同的结果,因此它是抽象的)。所以这两种数据类型本质上是相同的。 (我知道这是不正确的)。

我知道我搞错了。有人可以帮我弄清楚这个概念吗?

【问题讨论】:

  • 我们真的不确定你在问什么。
  • 是的,我写的那个例子没有多大意义。我只是想找出 ADT 和 Primitive 数据类型之间的区别。
  • 假设你想找到一个浮点数 xfloor(log_base(2, x))。如果您通过根据 IEEE 规范从内存中读取浮点指数的实际特定位来执行此操作,则您正在使用有关数据类型的特定表示的知识,即您将其视为具体数据类型。但是,如果您只调用提供的函数,则将 is 视为抽象数据类型。与整数相加相同,您可以自己操作位,只需调用+

标签: algorithm data-structures programming-languages adt abstract-data-type


【解决方案1】:

数据类型是任何编程语言中数据的分类 - 例如整数、字符、浮点数等。

抽象数据类型是一个理论概念。抽象数据类型 (ADT) 是一种数据类型的数学模型,其中数据类型由数据用户的行为(语义)定义,特别是根据可能的值、对数据的可能操作这种类型,以及这些操作的行为。一组数据值和相关的操作,它们被精确地指定,独立于任何特定的实现。抽象数据类型 (ADT) 是对一组数据和可以对数据执行的一组操作的规范。

例如:堆栈是一种抽象数据类型。堆栈 ADT 可以进行 push、pop、peek 操作。这三个操作定义了类型可以是什么,而与实现的语言无关。

所以我们可以说,原始数据类型是抽象数据类型的一种形式。只是它们是由语言制造商提供的,并且非常特定于语言。所以基本上有两种类型的数据类型原语和用户定义。但它们都是抽象数据类型。我希望这能说明问题。

【讨论】:

  • 我不确定如何将原始数据类型称为 ADT - 因为它们没有抽象。它们是纯数据/数据容器。另一方面,非原始/用户定义的数据类型存储对数据内存位置的引用,主要关注那些“数据容器”的设计和使用,例如一个整数堆栈,一个文本消息队列。抽象数据类型是非原始的子集,主要只是一个接口 - 仅定义行为,例如java.util.List
【解决方案2】:

抽象数据类型 - 这些是用于操作数据的构建块,否则这些数据将只是一串 1 和 0。您更愿意使用液态金属还是螺母和螺栓来建造?

【讨论】:

    【解决方案3】:

    这个问题已经问了很久了,但我有一个可能更清楚的答案。

    数据类型 - 处理一组值、它们的表示和一组可以应用于它们的操作。

    抽象数据类型 (ADT) - 处理一组值和一组可以对其执行的操作。

    两者的区别在于 ADT 不关心这些值的表示。

    【讨论】:

      猜你喜欢
      • 2012-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 2016-02-20
      • 2016-01-21
      • 2019-03-12
      相关资源
      最近更新 更多