【问题标题】:Is it possible to implement n stacks using 4 queues?是否可以使用 4 个队列实现 n 个堆栈?
【发布时间】:2020-08-30 16:10:32
【问题描述】:

我知道如何使用一个或两个队列来实现堆栈,但是只使用 4 个队列的 n 个堆栈呢? 有可能吗?如果是,请您解释一下算法吗?谢谢。

【问题讨论】:

    标签: data-structures stack queue


    【解决方案1】:

    是的。

    假设您可以从 2 个队列实现一个堆栈(如您的问题所述),“4 个队列”现在只是噪音,如果您可以使用 2 个堆栈实现 n 个堆栈,那么您的问题的答案是肯定的。

    这可以通过将元素推送到堆栈来完成,也可以通过堆栈的 id 来完成。弹出时,您将元素推送到另一个堆栈,直到您从所需堆栈中找到元素,然后将它们返回。

    这可能会被优化以避免一遍又一遍地推回,但我相信最坏情况的复杂性仍然与元素数量成线性关系。

    这是一个(非常未优化的)伪代码。

    Pop(stack_number):
      element = null
      while not head_stack.empty():
        if head_stack.peek()[0] == stack_number:
          element = head_stack.pop()
          break
        else:
          other_stack.push(head_stack.pop())
      while not other_stack.empty():
        head_stack.push(other_stack.pop())
      return element
    
    Push(stack_number, element):
      head_stack.push({stack_number, element})
    

    【讨论】:

      猜你喜欢
      • 2021-12-21
      • 2014-12-23
      • 2010-10-15
      • 1970-01-01
      • 2014-04-21
      • 2021-07-08
      • 2010-09-09
      • 2017-12-21
      • 2018-06-14
      相关资源
      最近更新 更多