|
1
5
堆不是ADT。它是一个数据结构。 维基百科必须引用:
奖励内容的灵感来自Steve McConnell的Code Complete-2。
|
|
2
4
我会试图用另一种方式澄清这种困惑。引用维基百科 here :
因此堆只是优先级队列抽象数据类型(ADT)的一种实现,可以在下面列出的许多其他类型中实现,但可能不限于:
将优先级队列ADT中主要操作的堆实现的时间效率与其他可能的实现进行比较:
|
|
|
3
2
堆不被视为抽象数据类型。 堆是一种专门的基于树的数据结构,它是称为优先级队列的抽象数据类型的实现。 |
|
|
4
1
我给你看维基百科上的完整一行,而你只引用了那一行中让你困惑的部分。如果你只走到下一段,也许你会更好地理解它。
这里写着
由于堆数据结构(DS)的流行,在实现优先级队列ADT时。优先级队列ADT通常称为堆 在维基百科引用的下一行
这里,第一堆表示优先级队列,而短堆中的二进制堆表示数据结构。
也可以引用以下内容:
这仅仅意味着它是一个DS而不是ADT。 |
|
|
5
1
1) Java软件结构,国际版[John Lewis,Joseph Chase]
2) 算法,第4版,Robert Sedgewick和Kevin Wayne
因此,如果你只是在设计这样的行为:
实际上,这只是一个ADT,实现是数据结构,事实上,两本书中的一本将堆定义为ADT 因此,通过1和2表示3可以是堆的ADT,因为您可以使用数组和指针等实现堆。优先级队列也是如此,但时间复杂性可能会改变 在 Java软件结构,国际版[John Lewis,Joseph Chase] 有HeapADT
但在 算法,第4版,Robert Sedgewick和Kevin Wayne 将PriorityQueue作为ADT:
作为DS: https://algs4.cs.princeton.edu/24pq/MaxPQ.java.html 我认为他们只会这样说:
因为他们谈论的是实施:
另一个例子可以说,关于List,List可以是一个adt,静态数组和dinamic数组是实现List的数据结构,但另一个作者将adt定义为,因为这是预期的行为。 您可以在另一本书中查看此数组: here ) 最后,如果你定义了某个东西的行为,我会说这是一个ADT,如果你正在执行这个实现,我会称它是一个DS。 编辑: 书籍之间的另一个矛盾 数据结构;Java中的算法Robert Lafore
|