栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

用栈实现队列python(leetcode232)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用栈实现队列python(leetcode232)

#232. 用栈实现队列

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):

python中数组的pop默认是针对数组中的最后一个元素,数组的pop就是栈的pop操作

class MyQueue(object):
    # 使用两个栈进行模拟队列

    def __init__(self):
        self.stack_in = [] # 输入栈
        self.stack_out = [] # 输出栈

    def push(self, x):
        """
        :type x: int
        :rtype: None
        """
        self.stack_in.append(x)
        
    def pop(self):
        """
        :rtype: int
        """
        # 数组的pop默认是针对数组中的最后一个元素,数组的pop就是栈的pop操作
        # 当输出栈空时,将输入栈的元素全部先pop弹出,再用数组的append压入stack_out,
        # pop弹出的是最后进入stack_in的元素,append压入后为变为数组的第一个元素,再用pop弹出时是最后被弹出
        # 所以stack_in中的第一个进入的元素,进入stack_out后为最后一个元素,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):
        """
        :rtype: int
        """
        # 返回队列开头的元素
        # 利用刚实现的pop操作
        # pop会删除元素,
        res = self.pop()
        # 假设连续调用两次peek,队列开头的元素就变了,因为上一个开头被pop删除,也会影响其他操作
        # 将刚被pop的元素加入stack_out,首先不会影响队列的pop操作,
        # 其次,下次调用peek之前还会调用pop操作,pop会先弹stack_out的元素,此时stack_out中元素还是开头
        self.stack_out.append(res)
        return res

    def empty(self):
        """
        :rtype: bool
        """
        # 当输出栈和输入栈同时为空才为空
        if self.stack_in or self.stack_out:
            return False 
        else:
            return 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()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/689258.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号