任何人都可以解释“抽象数据类型”和“容器”之间的区别吗?我应该将它们用作我的数据结构和算法类的项目的一部分,但我不明白其中的区别。
答案 0 :(得分:1)
抽象数据类型仅仅是数据存储方式的逻辑描述以及该数据允许的操作。例如,堆栈被定义为具有操作push,pop等和LIFO访问的数据类型。
容器是一个非常抽象的概念,但一般来说它意味着(无论如何)某种形式的封装 - 在某种意义上它可能掩盖了底层对象的复杂性,或者可能为一系列不同的可能提供统一的界面基础对象。它是一个如此坚定地植根于人们一直使用它的程序员词汇的词,因此它的含义非常模糊。
答案 1 :(得分:0)
我的回答是:
ADT的特点是可以对其执行的一组操作以及它们的语义定义。 ADT reader
可以通过操作来表征
available(reader) -> number
get_next(reader) -> element
未定义element
的类型。请注意,未定义reader
应如何在内部工作或get_next()
从哪里检索其元素。它的摘要。
容器只是一种(可能是抽象的)数据类型,可以包含其他数据类型的实例,如向量。我们的'reader
显然不必是一个容器:上面的定义没有说明它将包含其他数据类型的实例。
您可以实现一个reader
来保持从键盘读取并返回按下的键。这种实施显然不是容器 - 它不包含其他元素。
您还可以实现reader
,它是一个也实现上述两种方法的向量。 Eah调用get_next()
可以返回它的第一个元素,然后是第二个元素,依此类推。此实现包含其他元素,因此它也可以是容器。
答案 2 :(得分:0)
来自Skeina的算法设计手册如下。
我们将重点介绍三种基本抽象数据类型中的每一种 (容器,字典和优先级队列),并了解它们如何 用数组和列表实现。
我们使用“容器”一词来表示允许 与以下项无关的数据项的存储和检索 content.Bycontrast,字典是检索的抽象数据类型 基于键值或内容。
这意味着容器(例如向量),字典(例如哈希表)和PQ都是抽象数据类型。这意味着它们是数据结构 概念 ,使用诸如数组之类的本机数据类型或诸如指针之类的链接类型来实现。