是否可以使用 4 个队列来实现 n 个堆栈?

Is it possible to implement n stacks using 4 queues?

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

是的。

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

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

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

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

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})