题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
栈:先入后出,push操作将元素添加到队列的末尾,pop操作删除最末端的元素。
队列:先入先出,push操作将元素添加到队列的末尾,pop操作删除最前端的元素。
python中没有栈这种数据结构,因此选择列表结构,列表中的append方法表示在列表末尾添加一个元素,pop方法表示删掉列表的最后一个元素并将其输出。正好对应了栈的先入后出的结构。
a = [1,2,3,4,5]
a.append(6)
print(a)
#[1,2,3,4,5,6]
a.pop()
#6
print(a)
#[1,2,3,4,5]
使用列表的append和pop表示队列的push和pop操作
class Solution:
def __init__(self):
#初始化两个空列表,用于表示两个栈结构
self.stack1 = []
self.stack2 = []
def push(self, node):
# 队列的push操作将node添加到某个栈的末尾
self.stack1.append(node)
def pop(self):
# 队列的pop操作将栈的最前端元素返回出来
# 当栈二不为空时,直接弹出其最后一个元素(不太明白这部分存在的意义,但是没有的话显示错误)
if len(self.stack2) > 0:
return self.stack2.pop()
# 将栈1中的所有元素倒序装到栈2,这样栈2的pop就可以弹出栈1的第一个元素
while self.stack1:
self.stack2.append(self.stack1.pop())
if len(self.stack2) > 0:
return self.stack2.pop()
个人心得:
因为数据结构了解的不清晰,光看题目根本不知道要干什么...