使用两个栈来实现队列。
-
栈
- 先进后出 队列
- 先进先出 思路
- 利用两个栈逆序两次,就可以达到队列的效果,取值时,保证第一个栈为空,第二个栈顶的元素就是最先入队列的值
代码如下
class Stack(object):
def __init__(self):
self.items = []
def push(self,val):
self.items.append(val)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items)-1]
def isEmpty(self):
return self.items == []
class MyQueue:
def __init__(self):
"""
Initialize your data structure here.
"""
self.stack1 = Stack()
self.stack2 = Stack()
def push(self, x: int) -> None:
"""
Push element x to the back of queue.
"""
self.stack1.push(x)
def pop(self) -> int:
"""
Removes the element from in front of queue and returns that element.
"""
if not self.stack2.isEmpty():
return self.stack2.pop()
while not self.stack1.isEmpty():
self.stack2.push(self.stack1.pop())
return self.stack2.pop() # 拿到最前面的值
def peek(self) -> int:
"""
Get the front element.
"""
if not self.stack2.isEmpty():
return self.stack2.peek()
while not self.stack1.isEmpty():
self.stack2.push(self.stack1.pop())
return self.stack2.peek()
def empty(self) -> bool:
"""
Returns whether the queue is empty.
"""
rerurm self.stack1.isEmpty() and self.stack2.isEmpty()