【问题标题】:stack using two queues [duplicate]使用两个队列堆叠[重复]
【发布时间】:2011-03-31 21:34:18
【问题描述】:

可能重复:
Implement Stack using Two Queues

我想要在时间复杂度方面最有效的方法来使用两个队列实现堆栈

【问题讨论】:

  • 你为什么要这样做?是作业问题吗?
  • 只是想了解不同人的不同方法....
  • @jagan-sit,这是一个典型的家庭作业问题。要么是家庭作业(在这种情况下你应该这么说)要么不是(在这种情况下无论如何这是一个愚蠢的想法)。您不会用两个队列实现一个堆栈,而是用一个堆栈实现一个堆栈。无论如何,@donroby 发现这是一个骗局,所以投票结束。
  • 你的观点不合逻辑。绝对没有理由要实现具有两个队列的堆栈,除非您有某些理由需要它。如果是这样,为什么不告诉我们?

标签: data-structures


【解决方案1】:

我可能是错的,但对我来说这不是计算的。

队列(通常)是 FIFO 结构,堆栈是 LIFO 结构。我无法想象任何简单的 2 个 FIFO 组合会产生 LIFO,尽管我今天可能还没有喝足够的咖啡。

这可能是可能的,但我怀疑涉及 2 个队列的堆栈的实现几乎肯定会比堆栈的简单实现花费更长的时间来实现并且更容易出错。

不过话说回来……

如果您已经有一个 Queue 实现,并且该 Queue 允许您从它的 TAIL 而不是 HEAD 中删除项目(实际术语可能在您的实现中有所不同),那么您可以简单地使用 Queue,就好像它是一个堆栈一样从 TAIL 中检索项目。

【讨论】:

  • 可以的。你也可以用早餐麦片盖房子。这不是一个好主意:-)
  • 太棒了——这让我很高兴我没有“正式”接受过这类事情的培训。为什么要做这样的事情只是为了证明一些愚蠢的算法是可能的……只是用“真正的”堆栈完成工作并完成它。如果这家庭作业,那么对于学术界认为真正的计算应该包含什么——即解决问题,而不是在不存在问题的地方创造它们,这是一个可悲的评论。 :)
【解决方案2】:

很简单, 假设您有队列 A 和队列 B u 使用一个队列来保存数据,而另一个作为临时容器......但 A 和 B 一直在互换角色:

当您第一次插入数据时,您插入到队列 A 中。 要弹出您插入的最后一个项目,您将除最后一个之外的所有队列 A 元素 DEQUE 并将它们入队到队列 B 中。 DEQUEUE 队列 A 中唯一的元素,你得到了你想要的:堆栈的顶部,最后一个元素......等等......

现在要 POP 最新的项目,你重新做同样的工作,但 A 和 B 互换角色

【讨论】:

  • +1 - 添加一些代码,或者至少是伪代码:)
  • 好吧,这里还有更多工作要做,但我认为总体思路很明确;) ..(老实说,这篇文章似乎是一个家庭作业,但我该判断谁?? :P 所以我只是给出了对每个人公平的指示:))
【解决方案3】:

我不明白你为什么需要两个队列。我已经在此处和欺骗线程中看到了答案,您只需一个队列即可完成。

从dupe线程来看,这有两个版本,一个优化push,一个优化pop。

推送优化:

push:  
    enqueue in queue  
pop:  
    n = queue size.
    dequeue an object, and enqueue it immediately after. Do this n - 1 times.
    dequeue object, and return this.

流行优化:

push:
    enqueue in queue
    n = queue size.
    dequeue an object, and enqueue it immediately after. Do this n - 1 times.
pop:
    dequeue from queue and return.

再说一次,我不明白你为什么要这样做。痛斥你的教授让你在毫无意义的编程问题上浪费时间。

【讨论】:

    猜你喜欢
    • 2021-09-01
    • 2011-05-01
    • 2011-11-29
    • 2010-10-15
    • 2016-02-27
    • 2014-04-21
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多