理论:
stack 栈 先进后出 || queue队列 先进先出
Java 中用 Deque 接口实现,因为vector 继承而来的stack 并发环境下性能差
Stack : Push(加到顶部),pop(返回顶部),top(查看顶部),empty(空判断)
Queue:Enqueue(加到队伍末),dequeue(去掉顶),front/ rear(不删除只查看),empty
225题队列--> 实现--> 堆栈:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
2 个queue实现 stack。
Push:元素进入后先进入q2,然后进入q1 这样顺序是对的。push 第二次的时候 继续将元素加到q2 然后将q1元素加到q2,然后q2 跟q1交换。
pop:就是删掉q1的顶部元素
top:可以直接用q1的peak
empty 判断q1是否为空
class MyStack:
def __init__(self):
self.queue1 = collections.deque()
self.queue2 = collections.deque()
def push(self, x: int) -> None:
self.queue2.append(x)
while self.queue1:
self.queue2.append(self.queue1.popleft())
self.queue1, self.queue2 = self.queue2, self.queue1
def pop(self) -> int:
return self.queue1.popleft()
def top(self) -> int:
return self.queue1[0]
def empty(self) -> bool:
if len(self.queue1) == 0:
return True
else:
return False
# 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()
232用堆栈实现队列:https://leetcode.cn/problems/implement-queue-using-stacks/
2个stack:stack-in 和stack-out
enqueue:直接stack in的push
dequeue: 检查stackout 是不是空的,如果是就把stack in 中的元素逐个放入stackout实现反序
front:看stackout是不是空的,如果是就吧stackin的元素放到stack in 然后看stack out peak
empty :看stackin和out 是不是同时都空
class MyQueue:
def __init__(self):
self.instack =[]
self.outstack =[]
def push(self, x: int) -> None:
self.instack.append(x)
def pop(self) -> int:
self.peek()
return self.outstack.pop()
def peek(self) -> int:
if not self.outstack:
while self.instack:
self.outstack.append(self.instack.pop())
return self.outstack[-1]
def empty(self) -> bool:
return False if self.instack or self.outstack else True
# 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()