实现具有两个队列和有限队列大小的堆栈

时间:2018-01-04 19:08:11

标签: algorithm stack queue

跟进此问题:Implement Stack using Two Queues

我希望实现答案的A版(高效推送),但我还需要考虑队列大小,即我不能永远地排队等等。但在某个时刻,队列将耗尽空间。

我需要确保所有推送操作都以恒定的时间复杂度完成。

我将如何继续实施此功能?一旦完成就复制队列显然会导致O(n)的复杂性。

我可以创建一个新的空队列并开始在那里推送,但是它需要代表一个堆栈,并且在弹出操作的某一点,它将到达新队列的末尾并且不知道其余的这些物品都在旧队列中。

1 个答案:

答案 0 :(得分:1)

同意修复要排队的no.of项目的上限。同样的事情也适用于Stack。我们有一个'Stack Overflow'异常 - 在运行时可以发生@ push操作来处理这种情况。类似地,我们有弹出操作的“Stack Underflow”异常。

检查取决于DataStructure的大小(可以存储的项目数)。在这种情况下,它将是队列的大小。我们把它说成'n'。

具有异常的伪代码如下所示:

n = QUEUE_SIZE

def push()
  if len(queue1) >= n:
    print 'Stack Overflow'
    return
  else:
    #enqueue in queue1


def pop()
  if len(queue1) == 0:
    print 'Stack Underflow'
    return

  #while size of queue1 is bigger than 1, pipe dequeued items from queue1 into queue2
  #dequeue and return the last item of queue1, then switch the names of queue1 and queue2

此处,在任何时候,您的Stack DataStructure(使用队列实现)将具有最多'n'项,并且所有推送操作都是O(1)。

它还会抛出“Stack Overflow”和“Stack Underflow”异常

希望它有所帮助!