跟进此问题:Implement Stack using Two Queues
我希望实现答案的A版(高效推送),但我还需要考虑队列大小,即我不能永远地排队等等。但在某个时刻,队列将耗尽空间。
我需要确保所有推送操作都以恒定的时间复杂度完成。
我将如何继续实施此功能?一旦完成就复制队列显然会导致O(n)的复杂性。
我可以创建一个新的空队列并开始在那里推送,但是它需要代表一个堆栈,并且在弹出操作的某一点,它将到达新队列的末尾并且不知道其余的这些物品都在旧队列中。
答案 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”异常
希望它有所帮助!