用栈实现队列
刷题日期:2024-04-26
[[232.用栈实现队列]]
思路
使用输入栈和输出栈模拟
算法思路
在push数据的时候,只要数据放进输入栈就好,但在pop的时候,操作就复杂一些,输出栈如果为空,就把进栈数据全部导入进来(注意是全部导入),再从出栈弹出数据,如果输出栈不为空,则直接从出栈弹出数据就可以了。
算法细节
1.
Code
class MyQueue:
def __init__(self):
self.stackIn = []
self.stackOut = []
def push(self, x: int) -> None:
self.stackIn.append(x)
def pop(self) -> int:
if self.empty():
return None
if len(self.stackOut) == 0:
for i in range(len(self.stackIn)):
self.stackOut.append(self.stackIn.pop())
return self.stackOut.pop()
def peek(self) -> int:
if len(self.stackOut) == 0:
for i in range(len(self.stackIn)):
self.stackOut.append(self.stackIn.pop())
return self.stackOut[-1]
def empty(self) -> bool:
return len(self.stackIn) == 0 and len(self.stackOut) == 0
用队列实现栈
刷题日期:2024-04-26
[[225. 用队列实现栈]]
思路
仅使用一个队列模拟
算法思路
弹出或peek的时候循环弹出和压入队列即可
算法细节
1.
Code
from collections import deque
class MyStack:
def __init__(self):
self.queue = deque()
def push(self, x: int) -> None:
self.queue.append(x)
def pop(self) -> int:
for _ in range(len(self.queue) - 1):
self.queue.append(self.queue.popleft())
return self.queue.popleft()
def top(self) -> int:
for _ in range(len(self.queue) - 1):
self.queue.append(self.queue.popleft())
temp = self.queue[0]
self.queue.append(self.queue.popleft())
return temp
def empty(self) -> bool:
return len(self.queue) == 0