【LeetCode】算法 —— 232. 用栈实现队列【队列】

用栈实现队列逆序输出 用栈实现队列逆序输出,C语言代码,VC++编译器! 立即下载

版权声明:本文为博主原创文章,未经博主允许不得转载。



描述

  • 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(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

提示

进阶

  • 你能否实现每个操作均摊时间复杂度为 O(1) 的队列?换句话说,执行 n 个操作的总时间复杂度为 O(n) ,即使其中一个操作可能花费较长时间。

思路分析

分析:准备 2 个栈: inStack、 outStack

  • 入队时, push 到 inStack 中
    在这里插入图片描述
  • 出队时,情况一:如果 outStack 为空,将 inStack 所有元素逐一弹出, push 到 outStack, outStack 再弹出栈顶元素【11出队】
    在这里插入图片描述
  • 出队时,情况二:如果 outStack 不为空, outStack 弹出栈顶元素【11】
    在这里插入图片描述

实例:假设如下操作: 11入队、 22入队、出队(11)、 33入队、出队(22——>33)

  • 第一步:准备 2个空的 Stack
    在这里插入图片描述
  • 第二步:11入队、22入队
    在这里插入图片描述
  • 第三步:11 出队:情况一:如果 outStack 为空,将 inStack 所有元素逐一弹出, push 到 outStack, outStack 再弹出栈顶元素【11弹出】
    在这里插入图片描述
    在这里插入图片描述
  • 第四步:33入队
    在这里插入图片描述
  • 第五步:22 出队:情况二:如果 outStack 不为空, outStack 弹出栈顶元素【22】
    在这里插入图片描述
  • 第六步:33 出队:情况一
class MyQueue:

    def __init__(self):
        """
        Initializer your data structure here.
        """
        self.s1 = []
        self.s2 = []
        self.front = None


    # 入队
    def push(self, x: int) -> None:
        """
        Push element x to the back of queue.
        """
        if not self.s1: self.front = x
        self.s1.append(x)

    # 出队
    def pop(self) -> int:
        """
        Removes the element from in front of queue and return that element.
        """
        if not self.s2:
            while self.s1:
                self.s2.append(self.s1.pop())
            self.front = None
        return self.s2.pop()

    # 获取对头元素
    def peek(self) -> int:
        """
        Get the front element.
        """
        if self.s2:
            return self.s2[-1]
        return self.front

    # 是否为空
    def empty(self) -> bool:
        """
        Returns whether the queue is empty.
        """
        if not self.s1 and not self.s2:
            return True
        return False



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

版权声明:本文为博主原创文章,未经博主允许不得转载。
Sharding-JDBC 系列专题 - 第九篇:高可用性与集群管理 高可用性是指系统在面对故障(如数据库宕机、网络中断)时,能够快速恢复并继续提供服务。Sharding-JDBC 和 Sharding-Proxy 提供了多种机制支持高可用性,同时需要结合底层数据库的高可用方案(如 MySQL 主从复制、MHA)来实现。高可用性和集群管理是 Sharding-JDBC 和 Sharding-Proxy 在生产环境中成功应用的关键。本篇详细介绍了数据库高可用方案、Sharding-JDBC 的故障切换机制、Sharding-Proxy 的集群部署,以及分布式治理功能。 阅读详情

相关推荐

ConvLSTM时空预测实战代码详解

ConvLSTM代码复现

JaysonWong的博客 1万+

【C++ | PTA】队列操作

同时,在 push 函数中,我们使用 data[duilie++] 来将元素加入队列,并在 pop 函数中使用 data[ren++] 来弹出队首元素。对于操作2,若队列为空,则输出 “Invalid”,否则请输出队首元素。对于操作3,请输出队列长度。由于静态数组的长度是固定的,因此需要在代码中定义一个常量 MAXSIZE 来表示数组的最大长度。请实现一个MyQueue类,实现出队,入队,求队列长度.1 x : 表示从队尾插入x,0

等风来 5928

机器学习: 共轭梯度算法(PCG)

今天介绍数值计算和优化方法中非常有效的一种数值解法,共轭梯度法。我们知道,在解大型线性方程组的时候,很少会有一步到位的精确解析解,一般都需要通过迭代来进行逼近,而 PCG 就是这样一种迭代逼近算法。 我们先从一种特殊的线性方程组的定义开始,比如我们需要解如下的线性方程组: Ax=bAx=b 这里的 A(n×n)A(n×n) 是对称,正定矩阵, b(n×...

weixin_30807677的博客 3181

栈和队列作业-2020

7-2 队列操作 请实现一个MyQueue类,实现出队,入队,求队列长度. 实现入队函数 void push(int x); 实现出队函数 int pop(); 实现求队列长度函数 int size(); 输入格式: 每个输入包含1个测试用例。每个测试用例第一行给出一个正整数 n (n <= 10^6) ,接下去n行每行一个数字,表示一种操作: 1 x : 表示从队尾插入x,0<=x<=2^31-1。 2 : 表示队首元素出队。 3 : 表示求队列长度。 输出格式: 对于操作2,若队列为空

xiaosilence的博客 1238

从模拟到实战:移远EC800M单片机MQTT接入OneNet全流程解析

本文详细解析了移远EC800M单片机通过MQTT协议接入OneNet平台的全流程,涵盖环境准备、模拟设备搭建、硬件迁移、数据交互调试及性能优化等关键步骤。针对常见问题如AT指令缓冲区溢出、心跳间隔设置等提供实战解决方案,帮助开发者高效实现物联网设备稳定接入。

weixin_29215815的博客 432

基于STM32的频率计(采用外部中断的方式)

前言 最近在了解电赛相关的东西,和指导老师交流一下,我决定先从最简单的频率计做起。 频率计是来检测信号的频率的,在做频率计的时候可以用信号发生器发出的信号来进行测试。 原理 这是最基础的方波,我们可以通过检测上升沿的方式来测量其频率。从周期的角度出发连续两个上升沿的时间就是这个方波的周期,那这个周期分之一就是这个方波的频率了。 在思考了一段时间~~(我是萌新。。)~~ 我觉得有两个方法可以实现,第一个是采用stm32定时器的输入捕获功能,第二个就是用外部中断来实现这个功能。正如标题,我这次采用外部中断的方

qq_45784922的博客 6171

Leetcode:232. 用栈实现队列(C++)

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

Cosmoshhhyyy的博客 846

Voxel Hashing技术解析:如何解决TSDF内存爆炸问题?

本文深入解析Voxel Hashing技术如何有效解决TSDF内存爆炸问题。通过动态内存分配和空间哈希函数设计,该技术将内存占用降低96.6%,同时保持高精度重建。文章详细介绍了GPU加速实现、现代系统演进及实践指南,为实时3D重建提供工程解决方案。

m2n3b4v5c6的博客 714

7-2 队列操作 (300 分) PTA c语言

请实现一个MyQueue类,实现出队,入队,求队列长度. 实现入队函数 void push(int x); 实现出队函数 int pop(); 实现求队列长度函数 int size(); #include <stdio.h> #include "malloc.h" typedef struct QNode{ int data; struct QNode *next; }QNode, *QueuePtr; typedef struct { QueuePtr front

m0_63438830的博客 5464

【已解决,极简单!!】求助,R语言读取csv文件各种报错

【已解决】本来之前没问题,今天更新了Rstudioh以及R,就各种报错了。也看了目前能读取到的文件,从第一个中文字符直接就没有了。也就是说 还是读取中文字符的问题?新人初学,求大佬轻喷!

youyouluming945的博客 3878

在 SAP 里玩转 FTP:标准程序 RSFTP00x 全景解析与落地实践

摘要:SAP系统通过封装的标准FTP程序(RSFTP001-008)提供便捷的文件传输能力,适用于各类集成场景。关键点包括:1)依赖SAPFTP可执行程序和RFC目的地;2)使用RSFTP005进行前置检查并生成RFC配置;3)标准报表各司其职,如RSFTP002用于命令测试、RSFTP007/008提供参考实现;4)开发时组合FTP_CONNECT/COMMAND/DISCONNECT等函数模块。特别注意前台(SAPFTP)与后台(SAPFTPA)的环境差异,这是常见故障点。该方案通过标准化工具链显著降低

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 210

【简单】力扣算法题解析LeetCode232:用栈实现队列

本文介绍如何用两个栈实现队列功能,支持push、pop、peek和empty操作。通过inStack和outStack分工协作,push操作直接压入inStack,而pop和peek操作在outStack为空时将inStack元素倒序转移,确保队列的FIFO特性。

ylumwd的博客 998

JavaSwing_1.1: FlowLayout(流式布局)

FlowLayout,流式布局管理器。按水平方向依次排列放置组件,排满一行,换下一行继续排列。

谢TS的博客 7万+

算法学习——LeetCode力扣栈与队列篇1(232. 用栈实现队列、225. 用队列实现栈、20. 有效的括号、1047. 删除字符串中的所有相邻重复项)

算法学习——LeetCode力扣栈与队列篇1(232. 用栈实现队列、225. 用队列实现栈、20. 有效的括号、1047. 删除字符串中的所有相邻重复项)

拉依达不拉跨的博客 1283

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

代码随想录算法训练营Day10|栈与队列理论、Leetcode232用栈实现队列、Leetcode225用队列实现栈

Day10打卡!今日感想:开启栈与队列篇章!其实关于底层逻辑实现没搞透彻。还有具体运用的时候把栈和队列放在一起思考会转换的很慢。

m0_60979177的博客 1603

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

代码随想录算法训练营Day10 | Leetcode 232 用栈实现队列 Leetcode 225 用队列实现栈 Leetcode20有效的括号 Leetcode 1047 删除字符串所有相临重复项

纪念第一次看到一道题有思路且自己写出来哈哈哈哈哈哈哈哈哈。今天家中聚餐比较累所以就不总结C++知识点了,但第一次能看到题目有思路自己写出来还是比较值得纪念的。

m0_74853141的博客 525

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

代码随想录算法训练营day10 | leetcode 232.用栈实现队列 leetcode 225. 用队列实现栈

【代码】代码随想录算法训练营day10 | leetcode 232.用栈实现队列 leetcode 541. 反转字符串II。

weixin_44978762的博客 301

【力扣算法】232-用栈实现队列

题目 使用栈实现队列的下列操作: push(x) – 将一个元素放入队列的尾部。 pop() – 从队列首部移除元素。 peek() – 返回队列首部的元素。 empty() – 返回队列是否为空。 示例: MyQueue queue = new MyQueue(); queue.push(1); queue.push(2); queue.peek(); // 返回 1 queue.p...

ZeromaXHe的博客 401

leetcode算法232.用栈实现队列

leetcode算法232.用栈实现队列

真正的大师永远怀着一颗学徒的心 856

关于leetcode232.用栈实现队列的算法解析题

两个栈,一个负责输入(inStack),一个负责输出(outStack只有在outStack为空时,才把inStack元素搬过去,保证顺序。栈的基本操作只有 push、pop、peek、empty,符合题目要求。push()时间复杂度是 O(1),pop()和peek()最坏是 O(n),但均摊下来是 O(1)。

KAI_KD的博客 218

leetcode 232.用栈实现队列Java实现 算法之旅

leetcode 232. 用栈实现队列.easy](https://leetcode-cn.com/problems/implement-queue-using-stacks/) 使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。 示例: My...

qq_38765867的博客 419

⭐算法入门⭐《栈 和 队列》简单01 —— LeetCode 232. 用栈实现队列

《栈 和 队列》简单01 —— LeetCode 232. 用栈实现队列

英雄哪里出来 4693

算法训练第十天|力扣232.用栈实现队列,225. 用队列实现栈

算法训练第十天|力扣232.用栈实现队列,225. 用队列实现栈

weixin_43434369的博客 3118

代码随想录算法训练营第十天|LeetCode232 用栈实现队列、LeetCode225 用队列实现栈、LeetCode20 有效的括号、LeetCode1047 删除字符串中的所有相邻重复项

了解栈、队列的结构学会使用栈来做括号、字符串的匹配。

weixin_46078957的博客 357

算法训练Day11 | LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)

算法训练Day11 | LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)

weixin_47284299的博客 1300

力扣算法题232.用栈实现队列

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

Cary_cacb的博客 389
上一篇: OSError: exception: access violation writing 0x0000000000000000
下一篇: 【LeetCode】算法 —— 110. 平衡二叉树【二叉树】.
InitialHeart2021
博客等级 码龄5年 49粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

InitialHeart2021

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值