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

2023-11-06

 

目录

 

前言:

方法讲解

示例:

 代码实现

 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()

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

分享一张壁纸

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python数据结构-----leetcode232.用栈实现队列 的相关文章

  • Psycopg / Postgres:连接随机挂出

    我正在使用 psycopg2 作为我当前正在开发的cherrypy 应用程序 并使用 cli 和 phpgadmin 来手动处理一些操作 这是Python代码 One connection per thread cherrypy threa
  • 默认情况下在 Jupyter 笔记本中配置第一个单元

    有没有办法为 Jupyter 笔记本中的特定 python 内核配置默认的第一个单元 我同意默认的 python 导入违背了良好的编码实践 那么 我可以配置笔记本 使新的 python 笔记本的第一个单元始终是 import numpy a
  • 我应该如何在 python 中使用 lxml 处理 XLink 引用?

    我被要求编写一些读取 XML 配置文件的脚本 这些文件充分利用 XLink 来包含存储在多个文件中的 XML 例如
  • Python 3.4.3 tkinter - 程序在声明 IntVar 或任何其他 tkinter 数据类型时冻结

    上一主题 Python 3 4 tkinter checkbutton变量处理不起作用 响应 https stackoverflow com questions 33711472 python 3 4 tkinter checkbutton
  • 计算温度的偏导数(温度的水平平流)

    我想知道哪种方法计算x和y方向温度的偏导数 温度的水平平流 最正确 第二个代码使用温度 纬向风和经向风的数据矩阵 提取温度 T 纬向风分量 u 和经向风分量 v 的数据 import matplotlib pyplot as plt imp
  • 在 python + Flask + Gunicorn + nginx + Compute Engine 应用程序中从 Google Cloud Storage 读取文件失败

    在 python Flask Gunicorn nginx Compute Engine 应用程序中读取从 Google Cloud Storage 下载的文件失败 代码链接 https github com samuq CE test h
  • Python - 包和设置文件

    我有一个 python 包 需要从我的项目目录中提取设置 这是我的项目当前的结构 Project bin mypackage package files Project myproject project files start py se
  • 地图与星图的性能?

    我试图对两个序列进行纯Python 没有外部依赖 逐元素比较 我的第一个解决方案是 list map operator eq seq1 seq2 然后我发现starmap函数来自itertools 这看起来和我很相似 但事实证明 在最坏的情
  • Accel 无法在 gedit 3 插件中工作

    我试图为 Gedit 3 编写一个使用 GObject 自省的小插件 下面显示的代码的相关部分只是为了建立一个环境 然后我可以将函数放入按钮的回调中 但是 该按钮的加速器不起作用 这段代码有什么问题 我正在使用教程here http www
  • Pygame 玩家精灵没有出现

    我一直在为学校计算机课做这个项目 但无法让玩家精灵出现 有人可以帮忙吗 当我运行主游戏循环时 除了玩家精灵之外 所有内容都正确显示 它应该由于箭头输入而在屏幕上移动并受到重力的影响 当我删除图像并仅使用对象类和矩形时 该代码也有效 impo
  • WTForms 中的小数字段舍入

    我有一个包含价格小数字段的表单 如下所示 from flask ext wtf import Form import wtforms from wtforms validators import DataRequired from deci
  • Python3.1中的视图?

    Python3 1中的视图到底是什么 它们的行为方式似乎与迭代器类似 并且它们也可以具体化为列表 迭代器和视图有何不同 据我所知 视图仍然附加到创建它的对象上 对原始对象的修改会影响视图 来自docs http docs python or
  • 如何在树莓派上更新到最新的 python 3.5.1 版本?

    我昨天拿到了 Raspberry Pi 我已经在尝试用它来编写代码了 我有一个计划在其上运行的程序 但它仅与 Python 版本 3 5 0 或 3 5 1 兼容 并且我在互联网上找到的所有内容似乎都已经过时 与 Python 2 有关 或
  • 尝试修复我的功能

    我正在开发一个函数 我必须返回一个元组 其中第一个参数是最大数字的 str 第二个参数是 int 列表 这是示例以及我为该函数编写的内容 投票 G G N G C G 1 3 0 1 您必须将最大值的位置映射到正确的一方 parties N
  • Tornado websocket handler , self.close() 正在关闭连接而不触发 on_close() 方法

    我是 python stackoverflow tornado 的新手 所以请耐心等待 纠正我 我正在使用龙卷风开发实时应用程序 当我在 Websocket 处理程序类中调用 self close 时 on close 方法不会启动 这次我
  • 从 sublime_plugin.WindowCommand 获取当前文件名

    我开发插件sublime text 3 并想要获取当前打开的文件路径 absolute1 self window view file name 在哪里self is sublime plugin WindowCommand 但失败了 Att
  • 在字典理解中为 locals() 添加下标失败并出现 KeyError [重复]

    这个问题在这里已经有答案了 我对 Python 的奇怪行为感到困惑locals 基本上我想从字典中获取一个项目locals 在字典理解中 但它失败了 这是一个非常基本的事情 所以 gt gt gt foo 123 gt gt gt bar
  • Networkx 中 Louvain 分区的可视化

    请帮助我更改 Louvain 聚类算法结果的可视化 我从网站上获取了代码https github com taynaud python louvain https github com taynaud python louvain我可以重写
  • Python pip 安装错误 [SSL: CERTIFICATE_VERIFY_FAILED]

    我已经尝试解决这个问题有一段时间了 由于某种原因 我陷入了 ssl 问题 并且不知道发生了什么 问题 我已经安装了 python2 7 和 easy install2 7 但是当尝试使用 easy install2 7 安装 pip 时 出
  • Tensorflow ctc_loss_calculator:找不到有效路径

    当运行我的神经网络 双向 LSTM 进行音频识别时 我使用连接主义时间分类 CTC 但在某些时候 训练网络时我几乎每批都会收到来自 Tensorflow 的警告 W tensorflow core util ctc ctc loss cal

随机推荐

  • Linux mmap读/写触发共享文件页生命周期

    概述 Linux的mm内存子系统的核心功能就要要管理各种类型的page 确保能高效分配和释放 让物理内存得以最大化使用 初识内存系统往往关注的是page的申请和管理流程 容易忽略page的释放回收流程 其实理解mm中的内存回收和释放也是最核
  • 智能驾驶系统简介和测试要点分析

    智能驾驶系统是一种能够自主感知 决策和执行行驶任务的车辆控制系统 常见的智能驾驶系统包括 自动泊车系统 能够自动控制车辆完成泊车过程 包括寻找车位 转向 加速 制动等操作 自适应巡航系统 能够根据车速 车距和交通状况等因素自适应调整车速 并
  • react实现多选框切换样式逻辑

    import React Component from react class App extends Component constructor props super props this state checkboxItems con
  • time datetime模块 一篇精通

    time datetime python3中time模块的用法 导入 import time 查看time模块内置的能够使用的方法 print dir time 查看内置方法的说明 help time time method help ti
  • NVIDIA驱动安装

    需要去英伟达官网下载适合自己电脑的版本 nvidia网页可以自己测出你的电脑所需要的型号 首先Ctrl Alt F1进入字符界面 删除原有驱动版本 sudo apt get purge nvidia sudo apt get autorem
  • 执行.sh文件(shell脚本)的几种方式

    第一种 要进到shell脚本所在文件夹中 sh helloworld sh 第二种 要进到shell脚本所在文件夹中 bash helloworld sh 第三种 要进到shell脚本所在文件夹中 helloworld sh 第四种 hom
  • uniapp app以及小程序图片添加水印

    const ctx uni createCanvasContext myCanvas const ctx1 uni createCanvasContext myCanvas1 uni getImageInfo src this carInf
  • UiBot如何使用CSS Selector

    UiBot默认的数据抓取可以抓取整个表格 但是有时候我们并不想抓取整个表格 比方说 我们想将下图所有的头像复制到Excel里 这个时候我们无法使用数据抓取功能 因为我们并不是想抓取数据 而是要操作网页里的元素 将上图头像复制到Excel里的
  • Centos7 扩展系统磁盘大小

    Centos7扩展系统磁盘大小 系统盘大小不足 需要扩展系统盘大小 需要添加一块硬盘作为要使用的系统盘的扩展 我的是原来sda就有空间没有分配 所以不用单独再加磁盘了 直接使用sda的未分配的空间 如果是单独新增的一个磁盘例如 dev sd
  • Jenkins 联动 飞书 以签名校验方式 推送测试报告通知消息

    1 获取 飞书 Bot webhook 和 secret 2 python脚本 参考 Song Estelle 的文章 这里重写了部分代码 以签名校验方式发送通知 记得安装相关依赖 usr bin python3 encoding utf
  • Java 中的阻塞队列

    Java 中的阻塞队列 1 ArrayBlockingQueue 由数组结构组成的有界阻塞队列 2 LinkedBlockingQueue 由链表结构组成的有界阻塞队列 3 PriorityBlockingQueue 支持优先级排序的无界阻
  • Python 日期字符串和时间戳解析方法详解

    原文链接 https dreamhomes top posts 202103091919 html 由于从事智能运维AIOps相关的算法研究 因此日常接触的最多就是时间序列相关的数据 在不同场景下时间字符串表示的格式可能都不相同 因此本文记
  • 解决git pull 报错insufficient permission for adding an object to repository database .git/objects

    这个报错是没有 git objects文件的写入权限 可能是 git objects被root角色创建 等到别的角色去操作时就产生了权限问题 所以解决这个问题就要改 git objects的权限 chown R username group
  • Java学习之:异常及其处理方式

    文章目录 1 所有异常都继承 Throwable 类 2 分类 3 为什么要处理异常 4 异常处理格式 5 完整异常信息的取得 5 1 常见的异常 6 throws throw 关键字 6 1 throws 用在定义方法上 6 1 1 用在
  • R中重命名数据框列名小技巧

    R中重命名数据框列名 文章目录 前言 一 基础包names函数和索引 二 使用dplyr rename函数 前言 R语言中两种修改数据框列名的小方法 创建名为df的数据框 一 基础包names函数和索引 将第二列名score修改为popul
  • 深入理解Android之Gradle

    转自 http blog csdn net innost article details 48228651 深入理解Android之Gradle 格式更加精美的PDF版请到 https pan baidu com s 1boG2cLD下载
  • SQL语句中的循环

    SQL语句中的循环 SQL语句中的循环类似于foreach循环 可以循环遍历某个表并进行新增 修改和删除的操作 SQL语句中的循环 使用SQL的游标来实现 上示例 declare ID int 声明变量 名称 类型 begin 开始 pri
  • setFocus不能生效的问题

    focusInEvent只有在对象显示出来的情况下设定setFocus才可以触发 这一点help手册里有说明 转一篇文章如下 http blog csdn net alex201030273437 article details 81937
  • CSV简单了解

    1 CSV介绍 CSV全称是Comma Separate Values 这种文件格式可以作为不同程序之间的数据交互的格式 csv就是一种纯文本文件 如 txt doc等 即是一组字符序列 字符之间已英文字符的逗号或制表符 Tab 分隔 语法
  • Python数据结构-----leetcode232.用栈实现队列

    目录 前言 方法讲解 示例 代码实现 232 用栈实现队列 前言 我们都知道队列的特征是先进先出 就跟排队一样先到先得 而栈的特征是后进后出 那这里我们怎么去通过两个栈来实现一个队列的功能呢 这一期我们一起来学习吧 方法讲解 这里需要准备好