目录
因为五一调休加上学院王者比赛还有这两天忙着交大创中期检查材料,好像两天没有更新了。今天开始栈和队列的章节。
理论基础
了解一下 栈与队列的内部实现机智,文中是以C++为例讲解的。文章讲解:代码随想录
232.用栈实现队列
大家可以先看视频,了解一下模拟的过程,然后写代码会轻松很多。题目链接/文章讲解/视频讲解:代码随想录
思路
直接画图模拟,两个栈,栈1用来存,栈2用来输出,输入时直接存到栈1,当要输出时先检测栈2有没有元素,有的话直接输出,没有就把栈1的元素逐个取出放到栈2,在输出栈2的栈顶元素。
代码
class MyQueue:
def __init__(self):
self.lst_a = lst_a = []
self.lst_b = lst_b = []
def push(self, x: int) -> None:
self.lst_a.append(x)
def pop(self) -> int:
if self.lst_b:
return self.lst_b.pop()
else:
while self.lst_a:
self.lst_b.append(self.lst_a.pop())
return self.lst_b.pop()
def peek(self) -> int:
if self.lst_b:
return self.lst_b[-1]
else:
while self.lst_a:
self.lst_b.append(self.lst_a.pop())
return self.lst_b[-1]
def empty(self) -> bool:
if not self.lst_a and not self.lst_b:
return True
return False
# 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.用队列实现栈
建议大家掌握一个队列的方法,更简单一些,可以先看视频讲解题目链接/文章讲解/视频讲解:代码随想录
思路
动手画图。队列和栈有个很大的差别就是队列可以一边进一边出,栈只能从同一边进出。
利用这个特性,使用一个队列就可以模拟栈。添加元素时正常添加,返回元素时遍历队列n-1次(n为队列的长度),每一次把队列头元素放到队尾,遍历结束后直接输出队头元素即是等价的栈顶元素。
代码
class MyStack:
def __init__(self):
self.lst=[]
def push(self, x: int) -> None:
self.lst.append(x)
def pop(self) -> int:
for i in range(len(self.lst) - 1):
self.lst.append(self.lst.pop(0))
return self.lst.pop(0)
def top(self) -> int:
for i in range(len(self.lst) - 1):
self.lst.append(self.lst.pop(0))
a=self.lst.pop(0)
self.lst.append(a)
return a
def empty(self) -> bool:
return not self.lst
# 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()