Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm ADT(抽象数据类型)和容器之间的区别是什么?_Algorithm_Data Structures_Theory - Fatal编程技术网

Algorithm ADT(抽象数据类型)和容器之间的区别是什么?

Algorithm ADT(抽象数据类型)和容器之间的区别是什么?,algorithm,data-structures,theory,Algorithm,Data Structures,Theory,有人能解释“抽象数据类型”和“容器”之间的区别吗?我应该将它们作为我的数据结构和算法类项目的一部分使用,但我不理解其中的区别。抽象数据类型仅仅是对数据存储方式和对该数据允许的操作的逻辑描述。例如,堆栈被定义为具有push、pop等操作和后进先出访问的数据类型 容器是一个非常抽象的概念,但它通常意味着(无论如何对我来说)某种形式的封装——从某种意义上说,它可能掩盖底层对象的复杂性,或者可能为一系列不同的底层对象提供统一的接口。它是一个在程序员词汇表中根深蒂固的词,人们一直在使用它,因此它的含义非常

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

抽象数据类型仅仅是对数据存储方式和对该数据允许的操作的逻辑描述。例如,堆栈被定义为具有push、pop等操作和后进先出访问的数据类型


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

抽象数据类型仅仅是对数据存储方式和数据上允许的操作的逻辑描述。例如,堆栈被定义为具有push、pop等操作和后进先出访问的数据类型

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

我的答案是:

ADT的特点是可以对其执行一组操作,并定义其语义。ADT
读取器
可以通过以下操作来表征

  • 可用(读卡器)->编号
  • get_next(阅读器)->element
其中未定义
元素的类型。请注意,
读取器
如何在内部工作或
get_next()
从中检索其元素的位置没有定义。它是抽象的

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

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

我的答案是:

ADT的特点是可以对其执行一组操作,并定义其语义。ADT
读取器
可以通过以下操作来表征

  • 可用(读卡器)->编号
  • get_next(阅读器)->element
其中未定义
元素的类型。请注意,
读取器
如何在内部工作或
get_next()
从中检索其元素的位置没有定义。它是抽象的

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

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

来自Skeina的算法设计手册,这里有一些行

我们将关注三种基本的抽象数据类型中的每一种 (容器、字典和优先级队列)并查看它们如何 可以使用数组和列表来实现

我们使用术语容器来表示允许 数据项的存储和检索取决于 相比之下,DictionaresAreaAbstract数据类型检索 基于关键值或内容


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

来自Skeina的《算法设计手册》这里有几行

我们将关注三种基本的抽象数据类型中的每一种 (容器、字典和优先级队列)并查看它们如何 可以使用数组和列表来实现

我们使用术语容器来表示允许 数据项的存储和检索取决于 相比之下,DictionaresAreaAbstract数据类型检索 基于关键值或内容


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

混淆注意:在该字段中,“ADT”通常用于表示“代数数据类型”,因此请确保清楚定义术语并检查现有用途。非常感谢您提出此问题!我也感到困惑&试图区分Confusion注释:通常“ADT”在t中用于表示“代数数据类型”