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

news2025/1/12 8:49:04

目录

前言:

 方法步骤

示例

Python代码实现

225. 用队列实现栈


前言:

        上一期学习了怎么去通过两个栈来实现队列,同样这一期我就来讲讲怎么去通过两个队列来实现栈的功能,一起来学习吧。(上一期链接Python数据结构-----leetcode232.用栈实现队列_灰勒塔德的博客-CSDN博客)

 方法步骤

        同样的,要先准备好两个空队列,分别为 queue_in , queue_tem 第一个作为数据储存的队列,第二个作为临时储存数据的队列。入栈的话就直接把数据放入queue_in 就行了,如果要出栈的话就先判断整个栈里面数据是否为空,如果不为空的话就可以进行出栈操作,先把queue_in 里面的数据依次放入queue-tem 里面,直到queue_in 只剩下最后一个数据的时候就把这个数据进行出队处理,然后就实现了出栈操作。

示例

1.入栈操作:直接对数据a,b,c,d依次入队queue_in  

 2.出栈操作:先把queue_in 里面的数据依次出队然后放入queue_tem里面去暂时存着,然后直到queue_in 里面剩下最后一个数据 d ,这时候对这个数据进行出队返回就行了.

 3.出队完成了之后要,把queue_tem 里面的数据重新放入到queue_in 里面去,保证queue_in 不为空

 以上过程基本上就实现了两个队列实现栈的操作

Python代码实现

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

225. 用队列实现栈

 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。

实现 MyStack 类:

void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。
 

注意:

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

示例:

输入:
["MyStack", "push", "push", "top", "pop", "empty"]
[[], [1], [2], [], [], []]
输出:
[null, null, null, 2, 2, false]

解释:
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // 返回 2
myStack.pop(); // 返回 2
myStack.empty(); // 返回 False

class MyStack:

    def __init__(self):
        self.queue1 = []
        self.queue2 = []

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

    def pop(self) -> int:
        if not self.queue1:
            return -1
        else:
            while not len(self.queue1) == 1:
                self.queue2.append(self.queue1.pop(0))
            res = self.queue1.pop()
            while self.queue2:
                self.queue1.append(self.queue2.pop(0))
            return res

    def top(self) -> int:
        return self.queue1[len(self.queue1) - 1]

        return self.queue1[0]

    def empty(self) -> bool:
        return self.queue1 == []

# Your MyStack object will be instantiated and called as such:
# obj = MyStack()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.top()
# param_4 = obj.empty()

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

分享一张壁纸: 

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

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

相关文章

【Git基础】常用git命令(一)

文章目录 1. 创建仓库1.1 创建仓库1.2 git add和git commit① git add② git commit③ 工作区、暂存区和仓库 2. 创建git服务器2.1 服务器:2.2 本地2.3 修改配置信息 3. git基础原理3.1 四个区域3.2 工作流程3.3 文件的四种状态① git rm② git checkout 4.优雅的提…

setup的两个注意点

setup的两个注意点 首先,我们原本在v2中,父组件给子组件传递参数时,使用props来接收,当然除了这个方法外,我们还可以通过$attr来接收,只不过使用$atter就不能对父组件传来的参数进行类型的限定&#xff0c…

你是一个资深API接口爬虫程序员,现在需要你介绍一下如何通过商品id来获取商品数据并读取出来

获取商品数据通常需要使用API接口,根据接口文档中的说明传递商品id参数,并使用相应的请求方式(通常为GET请求)向API服务器发送请求即可。 以下是一个获取商品数据的示例请求: 首先打开API接口文档,找到获…

小航助学答题系统编程等级考试scratch二级真题2023年3月(含题库答题软件账号)

青少年编程等级考试scratch真题答题考试系统请点击 电子学会-全国青少年编程等级考试真题Scratch一级(2019年3月)在线答题_程序猿下山的博客-CSDN博客_小航答题助手 1.小猫的程序如图所示,积木块的颜色与球的颜色一致。点击绿旗执行程序后&a…

USB TO SPI / USB TO I2C 软件概要 7 --- 专业版调试器

所需设备: 1、USB 转 SPI / I2C 适配器; 软件概述: SPI类: USB TO SPI 1.0-Slave SPI从机软件,适合单步调试,支持SPI工作模式0、1、2、3,自动跟随主机通讯速率,自动接收数据; …

【算法宇宙——在故事中学算法】背包dp之完全背包问题

学习者不灵丝相传,而自杖明月相反,子来此事却无得失。 文章目录 前言正文小明的探险之旅(2)最后的优化代码 前言 尽管计算机是门严谨的学科,但正因为严谨,所以要有趣味才能看得下去。在笔者的前几篇算法类…

C#基础学习--LINQ

什么是LINQ 从对象获取数据的方法一直都是作为程序的一部分而设计的,然而使用LINQ可以很轻松的查询对象集合 LINQ提供程序 匿名类型 匿名类型经常用于LINQ查询的结果之中 匿名类型的对象创建表达式: using System; using System.Collections; using …

BiFormer:基于双层路由注意力的视觉Transformer

文章目录 摘要1、简介2、相关工作3、我们的方法:BiFormer3.1、预备知识:注意力3.2、双层路由注意(BRA)3.3、BRA的复杂性分析 4、实验4.1、ImageNet-1K图像分类4.2. 目标检测与实例分割4.3. 基于ADE20K的语义分割4.4、消融研究4.5、注意图可视化 5、局限性和未来工作…

C++ -3- 类和对象(中) | (三)END

文章目录 6.日期类的实现构造函数赋值运算符 “”前置、后置日期 - 日期日期类实现—代码汇总流插入流提取 7.const成员const 与 权限放大 8.取地址及const取地址操作符重载 6.日期类的实现 #pragma once #include <stdbool.h> #include <iostream> using namespa…

vue vue-json-viewer 展示 JSON 格式数据

1、下载 vue-json-viewer npm 下载 vue-json-viewer &#xff1a; // Vue2 npm install vue-json-viewer2 --save // Vue3 npm install vue-json-viewer3 --saveyarn 下载 vue-json-viewer &#xff1a; // Vue2 yarn add vue-json-viewer2 // Vue3 yarn add vue-json-view…

基于LS1028 TSN 交换机软件系统设计与实现(三)

NXP 推出 OpenIL 作为用于工业领域的 Linux 发行版&#xff0c; OpenIL 新增的部分中 含有&#xff1a;支持实时的操作系统的扩展和支持工业厂房中自动化 OEM 的 Time-Sensitive 网络。 OpenIL 作为开放型的工业 Linux 系统最大的优势便是将实时计算在网络中 的…

JavaWeb——UDP的报文结构和注意事项

目录 一、UDP特点 1、无连接 2、不可靠 3、面向数据报 4、全双工通信 二、UDP报文结构 1、报头 2、载荷 三、端口 四、报文长度 五、校验和 1、定义 六、注意事项 1、UDP只有接收缓冲区、没有发送缓冲区 2、UDP大小受限 3、基于UDP的应用层协议 4、MTU对UDP协议…

《Java8实战》第11章 用 Optional 取代 null

11.1 如何为缺失的值建模 public String getCarInsuranceName(Person person) { return person.getCar().getInsurance().getName(); } 上面的这种代码就很容易出现NullPointerException的异常。 11.1.1 采用防御式检查减少 NullPointerException 为了避免NullPointerExce…

【Linux】基础IO——文件操作|文件描述符|重定向|缓冲区

文章目录 一、文件操作1. 文件预备知识2. 回顾C文件操作3. 文件操作的系统调用标志位的传递openwriteread 二、文件描述符1. 文件描述符的理解2. 文件描述符的分配规则 三、重定向1. 重定向的本质2. dup2系统调用 四、缓冲区1. 缓冲区的刷新策略2. 缓冲区的位置3. 简单模拟实现…

当程序员的好处和坏处,我用七年经历来和大家聊一聊

我想和大家分享一下我做程序员这七年来的一些感受和经验&#xff0c;同时也想和大家聊一聊做程序员的好处和坏处&#xff0c;让大家真正深入了解程序员的工作&#xff0c;是不是和大家想象中的一样。 首先&#xff0c;我毕业于四川某不知名的二本院校&#xff0c;于2016年进入…

【软考备战·希赛网每日一练】2023年4月19日

文章目录 一、今日成绩二、错题总结第一题第二题第三题 三、知识查缺 题目及解析来源&#xff1a;2023年04月19日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析&#xff1a; 第二题 解析&#xff1a; server-side n.服务器端 enterprise n.企业 client n.客户 d…

matplotlib的配色(随机颜色函数,各种渐变色,彩虹色)

也是画图的时候经常会遇到的问题&#xff0c;什么颜色好看&#xff1f; 先直接上一个配色表&#xff1a; plt官网&#xff1a;List of named colors — Matplotlib 3.8.0.dev898g4f5b5741ce documentation 需要什么颜色传入就行了。 例如我下面画一个柱状图&#xff0c;自己选…

ctfhub技能树 web sql注入

1.整型注入 页面正常时 判断注入字段数 ?id1 order by 2判断注入回显位 ?id-1 union select 1,2查数据库 ?id-1 union select 1,database()库名&#xff1a;sqli 查数据表 ?id-1 union select 1,group_concat(table_name) from information_schema.tables where tabl…

kotlin协程、线程切换,函数方法委托

kotlin协程、线程切换&#xff0c;函数方法委托 一般编程的技法&#xff0c;比如&#xff0c;在Android中&#xff0c;假设在主线程中实现了一个函数&#xff0c;但该函数是耗时操作&#xff0c;毫无疑问&#xff0c;需要将这个函数的实现切入非主线程中操作&#xff0c;那么可…

Springcloud核心组件

在这里总结一下所有组件&#xff1a; springcloud是分布式微服务的一站式解决方案&#xff0c;可以说微服务是一个概念&#xff0c;而springcloud就是这个的实现 springcloud有五大核心组件&#xff1a; 注册中心 引言 由于微服务处于不同的进程&#xff0c;也就是说&…