232.用栈实现队列

目录

232.用栈实现队列

思路

方法一:用两个栈实现队列 

心得收获 


232.用栈实现队列

思路

话说晚上看题目真的需要精力,昨天晚上迷迷糊糊的看着道题目,觉得好难,根本看不懂在讲什么,然后直接放弃看题目睡觉去了,今天白天又重温一遍,感觉so easy。好了,回归正题,python里面没有内置的栈数据结构,所以可以使用列表来模拟栈操作。

但是栈的特性是先进后出,而队列的特性是先进先出,so,这该咋办?一个不行,咱们就上俩呗。
一个输入栈,一个输出栈。当向队列里面push数据的时候,放在输入栈stack_in里。需要拿数据的时候从输出栈stack_out里面pop()数据即可,以下为两个栈工作过程

方法一:用两个栈实现队列 

class MyQueue:
    def __init__(self) -> None:
        # 用来存放入栈数据
        self.stack_in = []
        # 用来存放出站数据
        self.stack_out = []
    # 将一个元素放入队列的尾部
    def push(self,x:int) ->None:
        self.stack_in.append(x)

    def pop(self) -> None:
        if not self.empty():
            return
        if self.stack_out:
            return self.stack_out.pop()
        else:
            for i in range(len(self.stack_in)):
                self.stack_out.append(self.stack_out.pop())
            return self.stack_out.pop()
    # 返回队列首部的元素
    def peek(self) -> None:
        head = self.pop()
        if head:
            self.stack_out.append(head)
            return head
        else:
            return
    def empty(self) -> None:
        # 如果进栈和出栈元素都为空,队列为空
        return not(self.stack_in or self.stack_out ) 

心得收获 

摘自代码随想录:

在push数据的时候,只要数据放进输入栈就好,但在pop的时候,操作就复杂一些,输出栈如果为空,就把进栈数据全部导入进来(注意是全部导入),再从出栈弹出数据,如果输出栈不为空,则直接从出栈弹出数据就可以了。

最后如何判断队列为空呢?如果进栈和出栈都为空的话,说明模拟的队列为空了。​​​​​​​

在push数据的时候,只要数据放进输入栈就好,但在pop的时候,操作就复杂一些,输出栈如果为空,就把进栈数据全部导入进来(注意是全部导入),再从出栈弹出数据,如果输出栈不为空,则直接从出栈弹出数据就可以了。

最后如何判断队列为空呢?如果进栈和出栈都为空的话,说明模拟的队列为空了。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值