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



跟进这个问题:使用两个队列实现堆栈

我希望实现答案的版本A(有效推送(,但是我还需要考虑队列大小,即我不能"永远排队",但在某个时候队列会耗尽空间。

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

我将如何继续实施这一点?一旦队列已满,复制队列显然会导致 O(n( 的复杂性。

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

同意在队列中固定要排队的项目的上限。同样的事情也适用于堆栈。我们有一个"堆栈溢出"异常 - 它可以在运行时发生@推送操作来处理这种情况。同样,我们有一个用于弹出操作的"堆栈下溢"例外。

检查取决于数据结构的大小(可以存储的项目的数量(。在这种情况下,它将是队列的大小。让我们把它说成"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

在这里,在任何时间点,您的堆栈数据结构(通过队列实现(将具有最大"n"个项目,并且所有推送操作都是 O(1(。

它还会引发"堆栈溢出"和"堆栈下溢"异常

希望对您有所帮助!

最新更新