Python数据结构-----leetcode232.用栈实现队列

news2024/12/28 13:42:59

 

目录

 

前言:

方法讲解

示例:

 代码实现

 232. 用栈实现队列


前言:

        我们都知道队列的特征是先进先出,就跟排队一样先到先得,而栈的特征是后进后出,那这里我们怎么去通过两个栈来实现一个队列的功能呢?这一期我们一起来学习吧。

方法讲解

        这里需要准备好两个空栈,期中一个作为存入数据的栈stack_in,另外一个作为弹出数据的栈 stack_out 。当有数据进入时,此时数据放入stack_in当中,当有数据要出来的时候,首先要去看看栈stack_out里面是否有数据,如果有数据的话那么就把数据直接弹出,反之如果没有的话那么就把栈stack_in 里面的数据依次弹入栈stack_out 里面当中,直到栈stack_in为空,这时候就可以去对栈stack_out进行出栈处理。以上过程就是两个栈来实现一个队列的功能。

图解如下: 

示例:

 实现a、b、c、d依次如队和出队的功能

 第一步:把a,b,c,d依次如栈stack_in 里面当中

 

 第二步:把栈stack_in 里面的数据依次出栈,然后如栈stack_out 当中

第三步:这时候只需要对栈stack_out 进行出栈操作就行了,出栈后的数据依次为a,b,c,d 刚好满足队列的功能。

 代码实现

class MyQueue(object):
    def __init__(self):
        '''初始化两个空栈'''
        self.__stack_in=[]
        self.__stack_out=[]
    def isempty(self):
        '''判断队列是否为空'''
        if not self.__stack_in and not self.__stack_out:
            return True
        return False

    def inqueue(self,data):
        '''入队'''
        self.__stack_in.append(data)
    def dequeue(self):
        '''出队'''
        if self.__stack_out:#判断栈stack_out是否空
            return self.__stack_out.pop()
        else:
            if not self.__stack_in:
                return -1 #如果都队列为空的话就返回-1
            else:
                while self.__stack_in:
                    self.__stack_out.append(self.__stack_in.pop())
            return self.__stack_out.pop()
    def showqueue(self):
        return self.__stack_out[::-1]+self.__stack_in

 232. 用栈实现队列

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

实现 MyQueue 类:

void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false
说明:

你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。

示例: 

输入:
["MyQueue", "push", "push", "peek", "pop", "empty"]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 1, 1, false]

解释:
MyQueue myQueue = new MyQueue();
myQueue.push(1); // queue is: [1]
myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)
myQueue.peek(); // return 1
myQueue.pop(); // return 1, queue is [2]
myQueue.empty(); // return false

代码如下: 

class MyQueue:

    def __init__(self):
        self.stack_a=[]
        self.stack_b=[]

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

    def pop(self) -> int:
        if self.empty():
            return None
        if self.stack_b:
            return self.stack_b.pop()
        while self.stack_a:
            self.stack_b.append(self.stack_a.pop())
        return self.stack_b.pop()

    def peek(self) -> int:
        a=self.pop()
        self.stack_b.append(a)阿
        return a

    def empty(self) -> bool:
        return not (self.stack_a or self.stack_b) 


# Your MyQueue object will be instantiated and called as such:
# obj = MyQueue()
# obj.push(x)
# param_2 = obj.pop()

 好了,以上就是本期的全部内容了,我们下一期再见!

分享一张壁纸

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/431261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GitHub和Gitee的源码下载

1.使用clone命令下载 如果本地安装了Git环境的话,可以直接在命令行中使用git clone命令把仓库中的文件全部下载到本地。 通过GitHub下载源码,执行如下命令: git clone https://github.com/******.git其中后面下载链接可以从项目下图处查看:…

excel动态获取sheet页单元格内容

1、问题描述 如下图所示,名称列可能是动态赋值的,名称列的内容有对应新的sheet页,如名称为PJ1及其PJ1的sheet页,最终需要获取PJ1的sheet页的B1单元格的内容。 如下图所示,是要获取PJ1的sheet页的B1的值。 2、解决办法…

Qt音视频开发33-vlc和mpv打开后鼠标打圈圈问题的解决

一、前言 如果采用的vlc句柄模式,如果鼠标停留在句柄控件中会发现在打开后鼠标打圈圈,mpv句柄模式是在关闭后鼠标打圈圈,这两者真是一前一后,这种给人的体验其实很不友好的,播放开始后或者播放完成后鼠标指针居然变成了繁忙,但是当你将鼠标位置从句柄控件中移到外面的时…

瑟瑟发抖吧~OpenAI刚刚推出王炸——引入ChatGPT插件,开启AI新生态

5分钟学会使用ChatGPT 插件(ChatGPT plugins)——ChatGPT生态建设的开端ChatGPT插件是什么OpenAI最新官方blog资料表示,已经在ChatGPT中实现了对插件的初步支持。插件是专门为以安全为核心原则的语言模型设计的工具,可帮助ChatGPT…

电脑CPU/GPU处理器知识普及

处理器知识普及 处理器主要分为两种:CPU与GPU,二者针对不同的业务进行工作; CPU主要处理数量小、难度大的任务,能比较好的处理单线程任务; GPU主要处理数量达,难度小的任务,比如图形渲染、多线…

C语言实现三子棋教学

本篇博客会教你如何使用C语言实现三子棋。主要包含以下步骤: 初始化棋盘。打印棋盘。玩家下棋。电脑下棋。判断输赢 0.预备工作 先定义一些符号,后面会用到。主要是棋盘的大小(行数列数),以及棋子。 #define ROW …

skvideo.io.vread无法读取视频(九天毕生版)

Vread无法读取视频 使用九天GPU时遇到的错误以及解决方法: 、vread无法读取视频 需要下载ffmpeg的exe(从网上找) 下载ffmpeg.exe(一共三个)后将exe的上级目录(bin)文件路径添加到系统路径中(…

Grounding DINO-开集目标检测论文解读

文章目录摘要背景算法3.1Feature Extraction and Enhancer3.2. Language-Guided Query Selection3.3. Cross-Modality Decoder3.4. Sub-Sentence Level Text Feature3.5. Loss Function实验4.2 Zero-Shot Transfer of Grounding DINOCOCO数据集LVIS数据集ODinW,开放…

超级账本与区块链应用场景

文章目录 区块链3.0去中心化应用的新需求区块链技术在行业应用中的条件区块链3.0架构与超级账本 区块链3.0架构 超级账本(Hyperledger Fabric)超级账本的项目FabricFabric的典型运行模型在Fabric中完成一次交易的整体步骤Fabric的节点 链码(Chaincode)数字身份证书组织通道 区块…

Java之 重载 重写的区别

重载 在同一个类中,多个方法有相同的方法名,但参数列表不同,这种同名不同参的方法就是重载重写 子类在继承父类方法的基础上(方法名和参数列表相同),对父类方法的实现进行覆盖的操作叫重写规则 重载的规则…

【详细教程】国内部署ChatGPT镜像网站

文章目录 一、准备阶段0、注册Open AI账号1、创建API密钥2、国内云服务器3、国外云服务器4、镜像网站代码5、效果重要:部署时会修改glibc库,为了防止云服务器被搞坏,请提前进行备份或者创建快照重要:部署时会修改glibc库&#xff…

Echarts 如何添加页脚元素

要在 Echarts 图表中添加页脚元素,可以通过在 Echarts 实例的配置对象中添加 graphic 元素来实现。graphic 元素是一个数组形式的配置项,可以通过其中的 text 元素添加文字,rect 元素添加矩形,image 元素添加图片等,从…

JavaSE注解

注解分类和说明点 注解:可对程序做解释可被其他程序读取 元注解:Target:表明注解的使用范围,Retention:表示要在什么级别保存注解信息,Document,Inherited 自定义注解:interface …

一文说透安全沙箱技术

在数字经济的东风中,数据安全至关重要。目前已经颁布了包括《数据安全法》、《个人信息保护法》和《数据安全管理办法》在内的国家政策,以促进整个数据要素的发展。 而近年来,随着移动应用程序的普及和小程序技术的崛起,安全沙箱…

RB-PEG-MAL,罗丹明-聚乙二醇-马来酰亚胺;Rhodamine PEG Maleimide;RB-PEG2000-MAL

RB-PEG-MAL,罗丹明-聚乙二醇-马来酰亚胺 中文名称:罗丹明-聚乙二醇-马来酰亚胺 英文名称:Rhodamine PEG Maleimide RB-PEG-MAL 性状:粉红色或暗红色固体或者液体,取决于分子量。 溶剂:溶于大部分有机溶剂,在水中有很好的溶解…

( “树” 之 BFS) 513. 找树左下角的值 ——【Leetcode每日一题】

513. 找树左下角的值 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7 提示: 二叉树的节点个数的范围是 […

2020年团体程序设计天梯赛-模拟赛

L1-5 判断题 判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分。 输入格式: 输入在第一行给出两个不超过 100 的正整数 N 和 M,分别是学生人数和判断题数量。第二行给出 M 个不超过 5 的正整数&#xf…

ChatGPT和Claude 对比测试(以Review MLIR Codegen代码为例)

Claude在MLIR代码分析上完全超越了ChatGPT并表现十分惊艳,请阅读全文或者自己注册感受它的强大。 0x0. 前言 这里将以oneflow IR部分中的一个Codegen任务(目标是在mlir codegen中支持oneflow stream,用oneflow stream替换pass中自己生成的st…

10个前端开发者需要掌握的DOM技巧

Web开发不断发展,掌握最新的趋势和最佳实践对每位开发者来说都至关重要。Web开发的最重要方面之一就是使用文档对象模型(DOM)。这篇文章中,小蓝将与大家共同探讨10个必须掌握的DOM技巧,帮助您成为更高效、更有效的开发…

CSS—javaEE

文章目录1.引入的方式1.1作为HTML的标签属性1.2style标签1.3link标签外部引入css文件2.基础选择器2.1标签选择器2.2类选择器2.3id选择器2.4通配符选择器3.复合选择器3.1后代选择器3.2子选择器3.3并集选择器3.4伪类选择器4.设置样式4.1字体4.2文本4.3背景4.4圆角5.显示模式6.盒模…