【问题标题】:How to implement a FIFO using a stack(LIFO) with equal complexities for push and pop operations of FIFO [duplicate]如何使用堆栈(LIFO)实现 FIFO,对于 FIFO 的推送和弹出操作具有相同的复杂性 [重复]
【发布时间】:2017-02-11 17:57:01
【问题描述】:

我了解使 Push 操作昂贵或 pop 操作昂贵的传统方法。

如何让push和pop的复杂度相等?

【问题讨论】:

  • 有 2 个堆栈指针,一个用于压入,一个用于弹出
  • 我只能使用堆栈的 push() 、 pop() 、isempty() 函数。不允许使用指针(指针会使问题变得非常简单)。
  • @PaulHankin :我正在尝试平衡您的链接最佳答案的 Insert() 和 take() 函数的复杂性。
  • 如果您点击该问题讨论中的链接,您可以找到例如:stackoverflow.com/questions/5538192/…

标签: algorithm data-structures stack fifo


【解决方案1】:

这是标准面试题。 普遍的想法:减x减=加。 您使用 2 个有序堆栈:

  • PUT 将数据部署到堆栈 1。
  • GET 从堆栈 2 中提取数据。
  • 如果 stack2 为空 - 将所有现有数据从堆栈 1 复制到堆栈 2,逐个元素,从顶部 1 到顶部 2。

【讨论】:

  • +1。但请注意,这会导致 amortized 恒定时间:每隔一段时间,“pop”操作就会很昂贵(因为它必须一次复制所有内容),但这平均为恒定时间,因为那个昂贵的“流行音乐”的成本与随后的廉价“流行音乐”的数量成正比。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多