题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解析:
栈:先进后出
队列:先进先出
题目是用两个栈实现一个队列,可以根据栈操作两次先进后出,就可以使得Pop的顺序变成队列的Pop操作。
假设一组数:3、5、11、19、8、7、10
辅助工具:stack1、stack2
队列的push操作可直接利用list的append操作,这个别无二致。
队列的pop操作相对来说比较复杂,push操作把一组数压入stack1【3,5,11】,然后将stack1的所有数全部pop到stack2中【11,5,3】,使用stack2的pop操作即可完成队列的pop操作,即3出栈stack2。注意顺序,stack2主要用来pop,当把stack2中所有的数都pop完,再把stack1的数压入stack2。
代码如下:
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.stack1 = []
self.stack2 = []
def push(self, node):
self.stack1.append(node)
def pop(self):
# return xx
size1 = len(self.stack1)
size2 = len(self.stack2)
if size1 == 0 and size2 == 0:
return None
elif size1 !=0 and size2 == 0:
for i in range(size1):
self.stack2.append(self.stack1.pop())
return self.stack2.pop()
else:
return self.stack2.pop()
相关题目:
利用两个队列实现一个栈,完成栈的Push和Pop操作。 栈中的元素为int类型。
方法与上述相同。
1. Push操作可以使用append来实现。
2. Pop操作可以借助两个队列:queue1和queue2
使用queue1来接收Push的值,需要Pop的时候就把queue1的所有值入队列queue2,每次都需要互相交换两个队列的地址,这里设定每次的操作都是使用queue1执行Push操作,使用queue2执行Pop操作。
代码如下:
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.Queue1 = []
self.Queue2 = []
def push(self, node):
self.Queue1.append(node)
def pop(self):
# return xx
size1 = len(self.Queue1)
size2 = len(self.Queue2)
if size1 == 0 and size2 == 0:
return None
if size1 != 0:
while(len(self.Queue1) != 1):
self.Queue2.append(self.Queue1.pop(0))
self.Queue2, self.Queue1 = self.Queue1, self.Queue2
return self.Queue2.pop(0)
if __name__ == '__main__':
solution = Solution()
solution.push(3)
solution.push(5)
solution.push(11)
print(solution.pop())
solution.push(19)
print(solution.pop())