用两个栈实现队列,实现入队和出队方法
代码:
class Queue(object):
def __init__(self):
self.stack1 = []
self.stack2 = []
#入队
def enqueue(self,element):
if self.stack1:
self.stack1.append(element)
else:
while self.stack2:
self.stack1.append(self.stack2.pop())
self.stack1.append(element)
#出队
def dequeue (self):
if self.stack2:
return self.stack2.pop()
elif self.stack1:
while self.stack1:
self.stack2.append(self.stack1.pop())
return self.stack2.pop()
else:
return None
if __name__=='__main__':
queue = Queue()
queue.enqueue('9')
queue.enqueue('10')
queue.enqueue('6')
queue.enqueue('2')
print queue.dequeue()
print queue.dequeue()
print queue.dequeue()
print queue.dequeue()
运行结果为:
9
10
6
2
思路:
入队时,先判断s1是否为空,如不为空,说明所有元素都在s1,此时将入队元素直接压入s1;如为空,要将s2的元素逐个“倒回”s1,再压入入队元素。
出队时,先判断s2是否为空,如不为空,直接弹出s2的顶元素并出队;如为空,将s1的元素逐个“倒入”s2,把最后一个元素弹出并出队。
网友评论