代码随想录算法训练营第十天|232.用栈实现队列,225. 用队列实现栈
232.用栈实现队列
题目链接:用栈实现队列
不太熟悉操作还是看了一下解析。
这里是用使用两个栈实现先入先出队列。
class MyQueue:
def __init__(self):
self.stack_in = []
self.stack_out = []
def push(self, x: int) -> None: #将元素 x 推到队列的末尾
self.stack_in.append(x)
def pop(self) -> int: #从队列的开头移除并返回元素
if not self.stack_out:
while self.stack_in:
self.stack_out.append(self.stack_in.pop()) #list.pop()=删除的项,list也会变成删除过后。
return self.stack_out.pop()
def peek(self) -> int: #返回队列开头的元素
ans = self.pop()
self.stack_out.append(ans)
return ans
def empty(self) -> bool:
return not (self.stack_in or self.stack_out)
# Your MyQueue object will be instantiated and called as such:
# obj = MyQueue()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.peek()
# param_4 = obj.empty()
225. 用队列实现栈
题目链接:用队列实现栈
这题是使用两个队列实现一个后入先出(LIFO)的栈
·这里两个列队,queue_in里有所有元素,queue_out只放要pop的元素
from collections import deque
class MyStack(object):
def __init__(self):
self.queue_in = deque()
self.queue_out = deque()
def push(self, x):
"""
:type x: int
:rtype: None
"""
self.queue_in.append(x)
def pop(self):
"""
:rtype: int
"""
if self.empty():
return None
for i in range(len(self.queue_in) - 1):
self.queue_out.append(self.queue_in.popleft())
# 确保queue_in里有所有元素
self.queue_in, self.queue_out = self.queue_out, self.queue_in # 交换in和out,这也是为啥in只用来存
return self.queue_out.popleft()
def top(self):
"""
:rtype: int
"""
if self.empty():
return None
return self.queue_in[-1]
def empty(self):
"""
:rtype: bool
"""
return len(self.queue_in) == 0
# Your MyStack object will be instantiated and called as such:
# obj = MyStack()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.top()
# param_4 = obj.empty()