力扣(leetcode) 225. 用队列实现栈 (两个队列实现栈------详细图解)

题目在这:https://leetcode-cn.com/problems/implement-stack-using-queues/

思路分析:

题目给了一堆函数,让你实现栈的功能,但只能使用队列函数,也就是用队列实现先进后出。

题目关键点就在于,存入栈的时候如何保存数据 才能让出队列的时候像栈一样是先进后出的。

两个队列实现先进后出:

1.进来的元素先加入到辅助队列。
在这里插入图片描述
2.判断主队列是否为空,若不为空,则将主队列的值弹出、加入到辅助队列。 一直重复此步骤直到主队列为空为止。

3.此时所有元素都在辅队列,主队列为空,交换主副队列元素。

在这里插入图片描述

主队列非空的情况:
在这里插入图片描述
循环将主队列元素全放到辅助队列,然后交换主辅队列元素。
在这里插入图片描述

在这里插入图片描述
最后输出主队列元素即可实现 先进后出。

其他函数直接return就行了。

完整代码

class MyStack:

    def __init__(self):
        """
        Initialize your data structure here.
        """
        self.qu1 = collections.deque()
        self.qu2 = collections.deque()

    def push(self, x: int) -> None:
        """
        Push element x onto stack.
        """
        self.qu2.append(x)
        while self.qu1:
            self.qu2.append(self.qu1.popleft())
        self.qu1, self.qu2 = self.qu2, self.qu1

    def pop(self) -> int:
        """
        Removes the element on top of the stack and returns that element.
        """
        return self.qu1.popleft()


    def top(self) -> int:
        """
        Get the top element.
        """
        return self.qu1[0]

    def empty(self) -> bool:
        """
        Returns whether the stack is empty.
        """
        # if self.qu1:
        #     return False
        # else:
        #     return True
        return False if self.qu1 else True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度不学习!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值