我读到优先级队列是堆数据结构的抽象数据类型,或者以另一种方式放置,堆是优先级队列的实现。但让我感到困惑的是,我认为堆本身就是一个ADT,因为它们通常是使用数组实现的(这里讨论的是min / max堆)。有人可以让我明确区分ADT领域的三个吗?
答案 0 :(得分:1)
让我分两步回答你。
数据类型是一组值以及该类型的操作。 几乎任何名词都可以产生数据类型。
示例:整数,日期,字符串,复数,段落,债券,图像,集,包,矢量,列表,堆栈,队列,双端队列,优先级队列,环,字典,树,图。
有多种结构在技术上数据类型但是"低级"从某种意义上说,他们的操作是部分指定的。例如,二叉搜索树"实现"通过执行查找,插入和删除操作来设置"向左和向右导航" - 但左和右的含义取决于树中的项目是存储在数组中还是链接在一起。
示例:二叉搜索树,AVL树,B树,堆,配对堆,哈希表,splay树,trie,R-tree
优先级队列和优先级堆是数据类型(更准确;抽象数据类型或 ADT ),但由于堆由优先级队列实现,我们可以将其视为数据结构。
堆是一种称为优先级队列的抽象数据类型的最有效实现,实际上优先级队列通常被称为" heaps",无论它们如何实现。请注意,尽管名称与#34;堆"相似to" stack"和#34;队列",后两者是抽象数据类型,而堆是特定的数据结构,"优先级队列"是抽象数据类型的正确术语。
注意:我的回答来自以下参考文献: