面试题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
版权声明:本文为博主原创文章,转载请附上博文链接!
---------------------
作者:lyshello123
来源:CSDN
原文:https://blog.csdn.net/songyunli1111/article/details/79348034
版权声明:本文为博主原创文章,转载请附上博文链接!

浙公网安备 33010602011771号