两个队列实现栈
【入栈】
保证一个队列为空,空的那个队列入队。
如果队列A只有一个元素,而且队列B中有大于一个元素,那么将B中的元素全部出队并入队A;
如果队列B 中只有一个元素,而且队列A中有1个或更多个元素,则把A中的元素全部出队并入队B,保证A为空。
【出栈】
出栈的时候,先判断队列A,在判断队列B.
class StackWith2Queen():
def __init__(self):
self.queen1 = []
self.queen2 = []
def push(self, num):
if not self.queen1:
self.queen1.append(num)
elif not self.queen2:
self.queen2.append(num)
if len(self.queen1) == 1 and len(self.queen2) >1:
while self.queen2:
self.queen1.append(self.queen2.pop(0))
elif len(self.queen1) >=1 and len(self.queen2) == 1:
while self.queen1:
self.queen2.append(self.queen1.pop(0))
def pop(self):
if self.queen1:
return self.queen1.pop(0)
elif self.queen2:
return self.queen2.pop(0)
else:
return None
if __name__ == '__main__':
stack = StackWith2Queen()
for x in [1,2,3,4,5]:
stack.push(x)
for x in range(5):
print(stack.pop())
两个栈实现队列
这个比较简单,入栈A一次,将A的元素全部出栈到B ,就实现了先入先出。
class QueenWith2Stack(object):
def __init__(self):
self.stack1 = []
self.stack2 = []
def appendtail(self,num):
self.stack1.append(num)
# print(self.stack1)
def deletehead(self):
if self.stack2:
return self.stack2.pop()
else:
if self.stack1:
while self.stack1:
self.stack2.append(self.stack1.pop())
return self.stack2.pop()
else:
return None
if __name__ == '__main__':
queen = QueenWith2Stack()
for x in [1,2,3,4,5]:
queen.appendtail(x)
for x in range(5):
print(queen.deletehead())