面试题9:2个队列实现1个栈

 1 class Stack:
 2     def __init__(self):
 3         self.queueA = []
 4         self.queueB = []
 5         
 6     def push(self,node):
 7         return self.queueA.append(node)
 8     
 9     def pop(self):
10         if self.queueA == []:
11             return None
12         while len(self.queueA) != 1:
13             self.queueB.append(self.queueA.pop())
14         self.queueA,self.queueB = self.queueB, self.queueA
15         return self.queueB.pop()
进栈:元素入队列A
出栈:判断如果队列A只有一个元素,则直接出队。否则,把队A中的元素出队并入队B,直到队A中只有一个元素,再直接出队。为了下一次继续操作,互换队A和队B。
复杂度分析:
第一种形式:如果以列表尾作为队尾,直接用 append 插入新元素,复杂度为O(1)。
再用pop去弹出队首,也就是列表第0个元素,弹出后插入到另一个队列中。第一次 pop,需要移动列表后面n-1个元素,第二次 pop,需要移动后面n-2个元素……直到最后只剩最后一个元素,直接出队。
复杂度:(n-1)+(n-2)+……+1=O(n^2)。
---------------------
作者:lyshello123
来源:CSDN
原文:https://blog.csdn.net/songyunli1111/article/details/79348034
版权声明:本文为博主原创文章,转载请附上博文链接!
posted @ 2019-07-30 17:28  lililili——  阅读(155)  评论(0)    收藏  举报