练习
# 两个栈做一个队列,input:1,2,3,pop()时的顺序是1,2,3
class TwoStackOneQueue(object):
def __init__(self):
# 先进后出,相当于只能pop(),我操作这两个stack时,只允许使用pop()方法
self.stack1 = []
self.stack2 = []
def push(self, node):
self.stack1.append(node)
# 队列的pop,先进先出,此方法相当于pop(0)
def pop(self):
if len(self.stack1) == 0 and len(self.stack2) == 0:
print ("empty from my list")
return None
elif len(self.stack2) == 0:
# 把stack1里的数据灌到stack2里,相当于两次pop操作,次序又回来了
while len(self.stack1) > 0:
self.stack2.append(self.stack1.pop())
return self.stack2.pop()
else:
return self.stack2.pop()
# 两个队列实现栈的功能,输入1,2,3;输出3,2,1
class TwoQueueOneStack(object):
def __init__(self):
# 队列,先进先出,只允许调用pop(0)方法
self.q1 = []
self.q2 = []
def push(self, node):
self.q1.append(node)
# 栈的pop,后进先出,相当于pop()
def pop(self):
if len(self.q1) == 0:
print ("empty from my stack")
# 如果q1只剩下一个元素时,肯定是最后进来的元素,弹出就对了。其余元素全都放到q2中存上
if len(self.q1) == 1:
return self.q1.pop(0)
while len(self.q1) > 1:
self.q2.append(self.q1.pop(0))
res = self.q1.pop(0) # q1中剩下的那个最新的元素
self.q1, self.q2 = self.q2, self.q1
return res
if __name__ == '__main__':
my_queue = TwoStackOneQueue()
my_queue.push(1)
my_queue.push(2)
my_queue.push(3)
print (my_queue.pop())
print (my_queue.pop())
print (my_queue.pop())
print ('----------------------------------------------')
my_stack = TwoQueueOneStack()
my_stack.push(1)
my_stack.push(2)
my_stack.push(3)
print(my_stack.pop())
print(my_stack.pop())
print(my_stack.pop())
网友评论