抽象数据结构和具体数据结构有什么区别?


17

我以为关联数组(即地图或字典)和哈希表是相同的概念,直到我在Wikipedia中看到

对于绑定数量很少的字典,使用关联列表(绑定的链接列表)来实现字典可能是有意义的。...

关联数组最常用的通用实现是使用哈希表:绑定数组,以及将每个可能的键映射到数组索引的哈希函数。...

字典也可以存储在二进制搜索树中或专用于特定类型键的数据结构中,例如基数树,try,Judy数组或van Emde Boas树。...

因此,我想,我的问题在于我不知道关联数组(即地图或字典)是一种抽象数据类型,而哈希表是一种具体的数据结构,并且可以使用不同的具体数据结构来实现相同的抽象数据类型。

我的问题是

  • 抽象数据结构和具体数据结构之间有什么区别和关系?

  • 每个示例都有哪些示例(抽象和具体的数据结构)?越多越好。

  • 有哪些具体数据结构可用于实现哪些抽象数据结构的列表?拥有一个会很好。

Answers:


17

抽象数据类型(ADT)本质上是一种API,而具体的数据结构则提供了该API的实现。对于给定的ADT,通常有几种不同的具体数据结构选择,这些数据结构支持ADT描述的查询和更新操作。给定ADT的每个具体数据结构都必须支持ADT描述的所有操作(在随机结构的情况下,可能具有成功的几率),但是每个具体结构都可以为每个操作的运行时间提供不同的保证。为给定的ADT选择要实现哪种具体的数据结构通常取决于每个操作的效率(包括初始化结构)的优先级以及实现和维护各种数据类型的复杂性。

一个答案中列出了太多的ADT和相应的具体结构,但是这里有一些示例:

  • Find(x)XXInsert(x)Delete(x)

  • Findsuccessor(x)小号XŤ小号s<Ť

  • 优先队列是需要一个ADT insertdelete-min操作(有时其它操作以及,例如find-min increase-keydelete-key)。实现优先级队列ADT的数据结构包括:

    1. 未排序的链表,具有快速insert但较慢的速度delete-min

    2. 排序链表,速度快delete-min但速度慢insert

    3. insertdelete-minsØ[RŤñ

    4. 具有对数和以及线性时间初始化的二进制堆insertdelete-min

    5. 堆实现还有其他变体。

  • stabbing(x)X


9

抽象数据类型描述了哪些操作可用以及它们遵循哪些法律。例如,字典允许您将值存储在给定键下并检索键的值,并承诺如果您先存储一个值,然后使用相同的键检索它,则将获得存储的值。堆栈具有推入和弹出操作。

具体的数据类型说明这些操作的实际实现方式。


谢谢!有哪些通用数据结构是抽象的或具体的哪种清单?
2012年

列表不是一般的,但是您可能要看一下xlinux.nist.gov/dads
Alexey Romanov
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.