题目的要求用两个栈来模拟队列,假设使用栈A和B模拟队列Q,A为插入栈,B为弹出栈,以实现队列Q。
再假设A和B都为空,可认为栈A提供入队列功能,栈B提供出队列的功能。
要入队列,入栈A即可,而出队列则要考虑两种情况:
(1)如果栈B不为空,则直接弹出栈B的数据
(2)如果栈B为空,则依次弹出栈A的数据,放入栈B中,再弹出栈B的数据
示例代码如下:
#encoding:utf-8
class Stack:
#模拟栈
def __init__(self):
self.items = []
#判断栈是否为空
def isEmpty(self):
return len(self.items) == 0
#返回栈的大小
def size(self):
return len(self.items)
#返回栈顶元素
def top(self):
if not self.isEmpty():
return self.items[len(self.items)-1]
else:
return None
#弹栈
def pop(self):
if len(self.items)>0:
return self.items.pop()
else:
print("栈已经为空")
return None
#压栈
def push(self,item):
self.items.append(item)
class MyStack:
def __init__(self):
self.A=Stack()
self.B=Stack()
def push(self,data):
self.A.push(data)
def pop(self):
if self.B.isEmpty():
while not self.A.isEmpty():
self.B.push(self.A.top())
self.A.pop()
first = self.B.top()
self.B.pop()
return first
if __name__ == "__main__":
s = MyStack()
s.push(1)
s.push(2)
print("队列首元素为:"+str(s.pop()))
print("队列首元素为:"+str(s.pop()))
在剑指offer中的答案如下: