232.用栈实现队列
题目链接;232.用栈实现队列
思路:需要两个栈一个输入栈,一个输出栈,在push数据的时候,只要数据放进输入栈,但在pop的时候,操作就复杂一些,输出栈如果为空,就把进栈数据全部导入进来(注意是全部导入),再从出栈弹出数据,如果输出栈不为空,则直接从输出栈弹出数据就行了。最后如何判断队列为空呢?如果进栈和出栈都为空的话,说明模拟的队列为空了。
代码如下:
class Myqueue:
def __init__(self):
self.stack_in = []
self.stack_out = []
def push(self, x: int) -> None:
self.stack_in.append(x)
def pop(self) -> int:
if self.empty():
return None
if self.stack_out:
return self.stack_out.pop()
else:
for i in range(len(self.stack_in)):
self.stack_out.append(self.stack_in.pop())
return self.stack_out.pop()
def peek(self) -> int:
ans = self.pop()
self.stack_out.append(ans)
return ans
def empty(self) -> bool:
# 只要in或out不为空则队列不为空
return not (self.stack_in or self.stack_out)
- 时间复杂度: push和empty为O(1), pop和peek为O(n)
- 空间复杂度: O(n)
学习时长
30分钟
225. 用队列实现栈
使用两个队列实现
思路:用两个队列que1和que2实现栈的功能,que2其实完全就是一个备份的作用,把que1最后面的元素以外的元素都备份到que2,然后弹出最后面的元素,再把其他元素从que2导回que1。
代码如下:
class MyStack:
def __init__(self):
self.queue_in = deque()
self.queue_out = deque()
def push(self, x: int) -> None:
self.queue_in.append(x)
def pop(self) -> int:
if self.empty():
return None
for i in range(len(self.queue_in)-1):
self.queue_out.append(self.queue_in.popleft())
self.queue_in,self.queue_out = self.queue_out,self.queue_in
return self.queue_out.popleft()
def top(self) -> int:
if self.empty():
return None
for i in range(len(self.queue_in)-1):
self.queue_out.append(self.queue_in.popleft())
self.queue_in,self.queue_out = self.queue_out,self.queue_in
temp = self.queue_out.popleft()
self.queue_in.append(temp)
return temp
def empty(self) -> bool:
return len(self.queue_in) == 0
使用一个队列实现
代码如下:
class MyStack:
def __init__(self):
self.queue_in = deque()
def push(self, x: int) -> None:
self.queue_in.append(x)
def pop(self) -> int:
if self.empty():
return None
for i in range(len(self.queue_in)-1):
self.queue_in.append(self.queue_in.popleft())
return self.queue_in.popleft()
def top(self) -> int:
if self.empty():
return None
for i in range(len(self.queue_in) - 1):
self.queue_in.append(self.queue_in.popleft())
temp = self.queue_in.popleft()
self.queue_in.append(temp)
return temp
def empty(self) -> bool:
return len(self.queue_in) == 0
学习时长
30分钟