【问题标题】:What is the difference between an ADT (Abstract Data Type) and a Container?ADT(抽象数据类型)和容器有什么区别?
【发布时间】:2018-05-19 21:33:39
【问题描述】:

谁能解释“抽象数据类型”和“容器”之间的区别?我应该将它们用作我的数据结构和算法类项目的一部分,但我不明白其中的区别。

【问题讨论】:

  • 混淆说明:在该字段中,“ADT”通常用于表示“代数数据类型”,因此请务必明确定义术语并检查现有用途。
  • 非常感谢您提出这个问题!我也很困惑并试图区分

标签: algorithm data-structures theory


【解决方案1】:

抽象数据类型只是数据存储方式的逻辑描述,以及允许对该数据执行的操作。例如,堆栈被定义为具有push、pop等操作和LIFO访问的数据类型。

容器是一个非常抽象的概念,但通常它意味着(无论如何对我来说)某种形​​式的封装——从某种意义上说,它可能掩盖底层对象的复杂性,或者可能为一系列不同的可能呈现统一的接口底层对象。这是一个深深植根于程序员词汇中的词,人们一直在使用它,因此它的含义非常模糊。

【讨论】:

    【解决方案2】:

    我的答案是:

    ADT 的特征在于您可以对其执行的一组操作以及它们的语义定义。 ADT reader 可以通过操作来表征

    • available(reader) -> number
    • get_next(reader) -> element

    element 的类型未定义。请注意,未定义 reader 应如何在内部工作或 get_next() 从何处检索其元素。它的摘要。

    容器只是一种(可能是抽象的)数据类型,可以包含其他数据类型的实例,例如向量。 Our'reader 显然不需要是容器:上面的定义没有说明它将包含其他数据类型的实例。

    您可以实现一个reader,它不断从键盘读取并返回按下的键。这种实施显然不是容器——它不包含其他元素。 您还可以实现一个reader,它是一个也实现了上述两种方法的向量。 get_next() 的每个调用都可以返回它的第一个元素,然后是第二个元素,依此类推。此实现包含其他元素,因此它也是一个容器。

    【讨论】:

      【解决方案3】:

      来自 Skeina 的算法设计手册,这里有几行。

      我们将重点介绍三种基本抽象数据类型中的每一种 (容器、字典和优先级队列),看看它们是如何实现的 用数组和列表来实现。

      我们使用术语容器来表示允许 数据项的存储和检索独立于 内容。相比之下,字典是检索的抽象数据类型 基于关键值或内容。

      这意味着容器(如向量)、字典(如哈希表)和 PQ 都是抽象数据类型。这意味着它们是数据结构概念,使用原生数据类型(如数组)或使用链接类型(如指针)来实现。

      【讨论】:

        猜你喜欢
        • 2012-12-07
        • 1970-01-01
        • 2012-05-03
        • 2015-09-26
        • 2010-10-10
        • 1970-01-01
        • 2011-01-24
        • 1970-01-01
        • 2010-12-27
        相关资源
        最近更新 更多