代码随想录训练营第十天 | 栈和队列

理论:

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()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值