algorithm - 使用队列实现栈——最好的复杂度

标签 algorithm stack queue time-complexity

我想知道是否有一种方法可以根据需要使用尽可能多的队列来实现堆栈,从而在 O(1) 中推送和弹出数据。 如果没有任何 O(1) 算法,那么最好的复杂度是多少?

最佳答案

如果允许在队列中递归定义队列,则可以使用以下 O(1) 次推送/弹出:

代码:

STACK:
  QUEUE q

PUSH (S, x):
  QUEUE temp
  ENQUEUE(temp, x)
  ENQUEUE(temp, S.q)
  S.q = temp


POP (S):
  ANY x := DEQUEUE(S.q) # Error here if queue is empty
  QUEUE S.q := DEQUEUE(S.q)
  return x

结果是递归形成的堆栈。

如果 [1,2] 表示一个堆栈,其中 dequeue([1,2]) 将返回 1。那么如果 1 然后 3 然后 6 被压入堆栈的数据结构将如下所示:

[6,[3,[1,[]]]]

关于algorithm - 使用队列实现栈——最好的复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26643483/

相关文章:

algorithm - 算法中的 RSA-2048 位

python - 有效地比较任意分配的标签列表

java - 第 K 个最小数算法做额外的工作?

c++ - 将字符串放入堆栈 C++ 时出错

javascript - 为多个对象设置动画时避免许多嵌套回调

c++ - 构造函数带参数时如何实例化模板类

python - 使用Python计算云的估计到达时间(ETA)?

algorithm - 使用 3 个堆栈实现 Deque(摊销时间 O(1))

java - 使用具有字符串复杂性的 ArrayStack ADT(java)

java - 队列没有产生正确的输出