力扣刷题Day 10 | 232.用栈实现队列,225. 用队列实现栈

232.用栈实现队列

题目链接

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

视频讲解

栈的基本操作! | LeetCode:232.用栈实现队列_哔哩哔哩_bilibili

笔记

  1. 用两个队列分别扮演负责入队的栈和负责出队的栈
  2. 入队操作直接将元素加入负责扮演入队栈的数组,出队操作先判断负责扮演出队栈的数组是否为空,不为空可直接对数组pop(),为空时需要先将扮演入队栈数组中的元素全部移到出队栈的数组后再进行数组的pop()
  3. Python数组自带的pop()方法默认移除并返回最后一个元素,出栈操作可以调用该方法进行辅助
  4. 返回队首元素的peek()可以复用pop()方法的代码,因此可以直接调用pop(),但要记得把元素添加回负责出队栈的数组

Python代码

class MyQueue:

    def __init__(self):
        # 用两个栈模拟队列,一个栈负责放入队的元素,一个栈负责出队元素
        self.stack_in = []
        self.stack_out = []

    def push(self, x: int) -> None:
        # 入队操作直接在负责入队的栈加入元素就行
        self.stack_in.append(x)

    def pop(self) -> int:
        # 若队列为空,返回None
        if self.empty():
            return None

        # 出队时首先看负责出队的栈是否为空,若不为空直接出队
        # 列表自带的pop()方法移除列表最后一个元素并返回该元素的值
        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:
        # 只返回队首的元素,不做移除操作
        # 用栈模拟的时候调用pop()方法之后还要记得把元素添加到负责出队的栈里,注意不能直接调用push()
        # 因为调用push()是把元素添加到负责入队的栈里
        res = self.pop()
        self.stack_out.append(res)
        return res


    def empty(self) -> bool:
        # 若负责入队和出队的栈都为空,则说明队列为空,反之不为空
        if len(self.stack_in) > 0 or len(self.stack_out) > 0:
            return False
        else:
            return True


225. 用队列实现栈

题目链接

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

视频讲解

队列的基本操作! | LeetCode:225. 用队列实现栈_哔哩哔哩_bilibili

笔记

  1. 用一个数组即可模拟一个栈,借用数组的pop()方法移除并返回最后一个元素,appen()方法在末尾添加元素

Python代码

class MyStack:

    def __init__(self):
        self.que = []


    def push(self, x: int) -> None:
        self.que.append(x)


    def pop(self) -> int:
        if not self.empty():
            return self.que.pop()
        else:
            return None


    def top(self) -> int:
        if not self.empty():
            tmp = self.que.pop()
            self.que.append(tmp)
            return tmp
        else:
            return None

    def empty(self) -> bool:
        if self.que:
            return False
        else:
            return True
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值