【问题标题】:What is the difference between a "container" and a "data structure"?“容器”和“数据结构”有什么区别?
【发布时间】:2012-06-27 01:15:31
【问题描述】:

什么是容器?据我了解:

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

  • 数据结构是这个抽象定义的实际实现,在某些计算机编程语言中,例如,C++ 中的堆栈在标准库中实现,为 std::stack。

    李>

首先,请更正/增强我目前对上述区别的理解。

其次,容器到底是什么?我经常听到这个词。和我对数据结构的定义一样吗?

此外,维基百科为这些术语提供了三个单独的条目。

【问题讨论】:

  • 一切都与上下文有关。我认为将它们单独作为两个词单独讨论是没有意义的。
  • 同意。如果您处于给定编程语言或实现的上下文中,那么这些词可能具有非常明确的含义,但在该上下文之外,它们非常模棱两可。除了 ADT,它始终表示上述内容。

标签: c++ algorithm data-structures


【解决方案1】:

没什么,真的。正如我们人类喜欢做的那样,它们只是同一个词的两个词。但是,afaik,官方的 CS 术语是数据结构,而 C++ 标准对 Container 有特定的 C++ 要求。但是,一般来说,它们是等价的。

【讨论】:

  • 都是结构“数据结构”。变量是最简单的“数据结构”吗?
【解决方案2】:

您对 ADT 与数据结构的印象是正确的——尽管它们在很大程度上是可以互换的。 ADT 是明确抽象的,数据结构是一个更通用的术语,可以是完全抽象的,也可以指实现细节。

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

【讨论】:

  • 然而,似乎(至少在我不太熟悉的 C++ 世界中)术语container 有时与collection 同义使用。
  • A collection 是 ADT 的一种类型,它包含可变数量的项目,通常是统一类型。不同的集合类型可以是关联的(例如哈希图)、有序的(例如列表)等。
【解决方案3】:

容器是数据结构的子集。 C++ 对容器有特殊要求,容器是不同数据结构的实现。

根据维基百科,数据结构是“一种存储和组织数据的特定方式”。容器是一个 C++ 结构,它是记录的集合,它本身就是一个数据结构。

【讨论】:

    【解决方案4】:

    正如其他人所说,这些术语被广泛使用,以至于它们具有各种含义,但这是我最常遇到的用法。

    数据结构是计算机科学中的一个术语,它可以用于理论讨论而无需参考任何特定语言。 在有关算法的书籍中讨论了许多数据结构,例如队列、树、哈希表...... 数据结构几乎可以用任何语言实现。

    容器是在特定语言的上下文中使用的术语,当有一个可用的已实现容器库可供程序员立即使用时。 几个不同的库可以实现相同的(抽象的)数据结构(例如,简单的链表),但具有不同的容器,即不同的源代码和不同的名称(一个可以称为“队列”,另一个可以称为“fifo”,以及第三个“堆栈”)。

    此外,容器必须是存储其他类型的一种方式,例如向量存储整数。 举个例子,在内存中表示一个图有几种方式:邻接矩阵、邻接表、前向星...这些都是数据结构,但它们不是容器,因为它们不包含其他类型,它们只是表示图的节点和链接。这些数据结构存储的数据就是节点和链接。

    【讨论】:

      猜你喜欢
      • 2014-06-17
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多