Python - 代码随想录算法训练营第十天 | 理论基础、232.用栈实现队列、225. 用队列实现栈
前言
开始队列和栈啦
理论基础
队列是先进先出,栈是先进后出。
emmm 这两句就足够了
232.用栈实现队列
题目链接
使用栈实现队列的下列操作:
push(x) – 将一个元素放入队列的尾部。
pop() – 从队列首部移除元素。
peek() – 返回队列首部的元素。
empty() – 返回队列是否为空。
示例:
MyQueue queue = new MyQueue();
queue.push(1);
queue.push(2);
queue.peek(); // 返回 1
queue.pop(); // 返回 1
queue.empty(); // 返回 false
思路:
1、输入:比较简单,可以用s.append()解决
2、输出:因为栈和列表输出的顺序是刚好相反的,因此,用两个栈倒一下,就可以实习队列的输出。
3、返回首元素:可以复用上面的输出。但是输出是把元素弹出来了,所以用完再把那个元素装回去。
4、判空: 只要两个列表都没有元素则为空。
代码如下:
class MyQueue:
def __init__(self):
# stack_in :push
# stack_out :pop
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)
# 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. 用队列实现栈
题目链接
使用队列实现栈的下列操作:
push(x) – 元素 x 入栈
pop() – 移除栈顶元素
top() – 获取栈顶元素
empty() – 返回栈是否为空
注意:
你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。
你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
你可以假设所有操作都是有效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)。
思路:
类似栈那样,用两个队列来实现也可以。有更巧妙的方法,用一个队列实现栈。
这部分主要是写输出的代码。我们希望每次把队列前面的内容放出去存起来,然后弹出最后一个元素。
基于此,我们可以把队列前面的内容逐个重新存进队列,此时队列最前面的就是我们想弹出最后一个元素 !
代码如下:
class MyStack:
def __init__(self):
self.que = deque()
def push(self, x: int) -> None:
self.que.append(x)
def pop(self) -> int:
if self.empty():
return None
if self.que:
return self.que.pop()
else:
#把除了最后一个,前面的元素重新存进去
for i in range(len(self.que())-1):
self.que.append(self.que.pop())
return self.que.pop()
def top(self) -> int:
if self.empty():
return None
return self.que[-1]
def empty(self) -> bool:
return not self.que
# 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()
总结
-
待改进:今天的内容掌握的还可以
-
收获 :s[-1] ,指取出最后一个元素