【发布时间】:2016-01-27 17:02:54
【问题描述】:
优先级队列用于实现存储字符的堆栈。
Push(C) 用于实现Insert(Q,C,K),其中K 是实现选择的适当密钥。
Pop 实现为Delete_Min(Q),对于一系列操作,必须按照什么顺序选择键,严格递减还是严格递增?
【问题讨论】:
标签: data-structures stack priority-queue abstract-data-type
优先级队列用于实现存储字符的堆栈。
Push(C) 用于实现Insert(Q,C,K),其中K 是实现选择的适当密钥。
Pop 实现为Delete_Min(Q),对于一系列操作,必须按照什么顺序选择键,严格递减还是严格递增?
【问题讨论】:
标签: data-structures stack priority-queue abstract-data-type
首先我要说,优先级队列和堆栈是两种完全不同的数据结构,具有不同的用途和应用。一个不能总是用来实现另一个。
是的,在某些情况下可以根据另一个数据结构来定义数据结构:例如,您可以使用链表创建堆栈或队列(实际上非常简单),但是使用优先级队列实现堆栈并不总是工作。为什么?
因为堆栈是先进后出的。你压入堆栈的最后一件事将是第一个弹出的东西。堆栈的唯一工作是保持推送项目的顺序完整并以相反的顺序弹出。
然而,优先级队列总是会给你一个弹出的最小值(或基于实现的最大值)。根据定义,优先级队列必须重新构建自身以始终保持“堆属性”。这意味着不一定会保留您推送的原始顺序。
现在,您的问题应该表述为“在什么情况下优先级队列和堆栈的行为方式相同?”
您提到您的优先级队列pop() 将从您的队列中删除最小值,这表明您手头有一个最小堆。在这种情况下,优先级队列中的一系列弹出类似于堆栈中的弹出的唯一情况是,当项目全部以非递增顺序推送时。它不必严格减少。 (考虑推动所有相同的值)。
【讨论】: