LeetCode225.用队列实现栈

LeetCode225.用队列实现栈

文章目录

  • LeetCode225.用队列实现栈
    • 题目描述
    • 实现1:
    • 实现2:

题目描述

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

实现 MyStack 类:

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

实现1:

入栈:把数据push到主队列

出栈:把主队列中n-1个数据导入到副队列,主队列只剩下最后进入的元素,出队即可(模拟后进先出)

top:栈顶元素就是主队列的队尾(back)

判空:判断主队列是否为空

image-20250226182544734

代码:

class MyStack {
public:
    MyStack() {

    }
    
    void push(int x) {
        main_q.push(x);
    }
    
    int pop() {
        //先导入到辅助栈
        while(main_q.size() > 1)
        {
            aux_q.push(main_q.front());
            main_q.pop();
        }
        int pop_value = main_q.front();       //记录pop的元素
        main_q.pop();//把最后一个元素出队   -> 实现出栈效果

        //然后把数据导回去
        while(!aux_q.empty())
        {
            main_q.push(aux_q.front());
            aux_q.pop();
        }

        return pop_value;
    }
    
    int top() {
        return main_q.back();
    }
    
    bool empty() {
        return main_q.empty();
    }   
private:
    queue<int> main_q;
    queue<int> aux_q;
};

实现2:

  • 入栈:先将元素入队到副队列,再将主队列的全部元素依次出队并入队到副队列。副队列的front就是新入栈的元素。然后将主队列和副队列交换(保持副队列为空),主队列的元素就是栈内的元素。主队列的front就是栈顶,back就是栈底。

  • 出栈:主队列出队

  • 取栈顶:主队列的front

  • 判空:主队列是否为空

代码:

class MyStack {
public:
    MyStack() {}

    void push(int x) {
        // 先push到副队列
        aux_q.push(x);
        // 主队列的元素push到副队列
        while (!main_q.empty()) {
            aux_q.push(main_q.front());
            main_q.pop();
        }
        // 此时主队列为空,主队列和副队列交换
        main_q.swap(aux_q);
    }

    int pop() {
        int pop_val = main_q.front();
        main_q.pop();
        return pop_val;
    }

    int top() { return main_q.front(); }

    bool empty() { return main_q.empty(); }

private:
    queue<int> main_q;
    queue<int> aux_q;
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】vim 设置

【Linux】vim 设置 零、起因 刚学Linux&#xff0c;有时候会重装Linux系统&#xff0c;然后默认的vi不太好用&#xff0c;需要进行一些设置&#xff0c;本文简述如何配置一个好用的vim。 壹、软件安装 sudo apt-get install vim贰、配置路径 对所有用户生效&#xff1a; …

【FL0091】基于SSM和微信小程序的社区二手物品交易小程序

&#x1f9d1;‍&#x1f4bb;博主介绍&#x1f9d1;‍&#x1f4bb; 全网粉丝10W,CSDN全栈领域优质创作者&#xff0c;博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战&#xff0c;以及程序定制化开发…

Javaweb后端数据库多表关系一对多,外键,一对一

多表关系 一对多 多的表里&#xff0c;要有一表里的主键 外键 多的表上&#xff0c;添加外键 一对一 多对多 案例

seacmsv9注入管理员账号密码+orderby+limit

seacmsv9注入管理员账号密码 seacms介绍 海洋影视管理系统&#xff08;seacms&#xff0c;海洋cms&#xff09;是一套专为不同需求的站长而设计的视频点播系统&#xff0c;采用的是 php5.Xmysql 的架构&#xff0c;使用 fofa 搜索可以看到存在 400的记录&#xff1a; 因为sea…

开源基准测试模拟器:BlueROV2 水下机器人的控制(更改Z方向控制器)

开源基准测试模拟器:BlueROV2 水下机器人的控制(更改Z方向控制器) 将原有项目的z方向控制器由自适应滑膜控制器(ASMC)更改为自抗扰控制器(ADRC) 原Z控制器 更改为ADRC后图像 原自适应滑膜控制器代码 function u =

【苍穹外卖】问题笔记

【DAY1 】 1.VCS找不到 好吧&#xff0c;发现没安git 接着发现安全模式有问题&#xff0c;点开代码信任此项目 2.导入初始文件&#xff0c;全员爆红 好像没maven&#xff0c;配一个 并在设置里设置好maven 3.启用注解&#xff0c;见新手苍穹 pom.xml改lombok版本为1.1…

项目实践 之 pdf简历的解析和填充(若依+vue3)

文章目录 环境背景最终效果前端讲解左侧模块解析右侧上传模块解析前端步骤 后端讲解代码前端 环境背景 若依前后端分离框架 vue最后边附有代码哦 最终效果 前端讲解 左侧模块解析 1、左侧表单使用el-form 注意&#xff1a; 1、prop出现的字段&#xff0c;需要保证是该类所…

Web自动化之Selenium控制已经打开的浏览器(Chrome,Edge)

在使用selenium进行web自动化或爬虫的时候,经常会面临登录的情况,对于这种情况,我们可以利用Selenium控制已经打开的浏览器&#xff0c;从而避免每次都需要重新打开浏览器并进行登录的繁琐步骤。 目录 说明 启动浏览器 注意 --user-data-dir说明 代码设定 代码 改进代…

千峰React:案例一

做这个案例捏 因为需要用到样式&#xff0c;所以创建一个样式文件&#xff1a; //29_实战.module.css .active{text-decoration:line-through } 然后创建jsx文件&#xff0c;修改main文件&#xff1a;导入Todos&#xff0c;写入Todos组件 import { StrictMode } from react …

自动驾驶FSD技术的核心算法与软件实现

引言&#xff1a;FSD技术的定义与发展背景 在当今快速发展的科技领域中&#xff0c;自动驾驶技术已经成为全球关注的焦点之一。其中&#xff0c;“FSD”&#xff08;Full Self-Driving&#xff0c;全自动驾驶&#xff09;代表了这一领域的最高目标——让车辆在无需人类干预的情…

Go红队开发—并发编程

文章目录 并发编程go协程chan通道无缓冲通道有缓冲通道创建⽆缓冲和缓冲通道 等协程sync.WaitGroup同步Runtime包Gosched()Goexit() 区别 同步变量sync.Mutex互斥锁atomic原子变量 SelectTicker定时器控制并发数量核心机制 并发编程阶段练习重要的细节端口扫描股票监控 并发编程…

【嵌入式原理设计】实验六:倒车控制设计

目录 一、实验目的 二、实验环境 三、实验内容 四、实验记录及处理 五、实验小结 六、成果文件提取链接 一、实验目的 熟悉和掌握各模块联合控制的工作方式 二、实验环境 Win10ESP32实验开发板 三、实验内容 1、用串口和OLED显示当前小车与障碍物的距离值&#xff1b…

探索浮点数在内存中的存储(附带快速计算补码转十进制)

目录 一、浮点数在内存中的存储 1、常见的浮点数&#xff1a; 2、浮点数存储规则&#xff1a; 3、内存中无法精确存储&#xff1a; 4、移码与指数位E&#xff1a; 5、指数E的三种情况&#xff1a; 二、快速计算补码转十进制 1、第一种方法讨论&#xff1a; 2、第二种方…

实体机器人识别虚拟环境中障碍物

之前的内容已经实现了虚拟机器人识别实体机器人的功能&#xff0c;接下来就是实体机器人如何识别虚拟环境中的障碍物&#xff08;包括虚拟环境中的障碍物和其他虚拟机器人&#xff09;。 我做的是基于雷达的&#xff0c;所以主要要处理的是雷达的scan话题 我的虚拟机器人命名…

湖北中医药大学谱度众合(武汉)生命科技有限公司研究生工作站揭牌

2025年2月11日&#xff0c;湖北中医药大学&谱度众合&#xff08;武汉&#xff09;生命科技有限公司研究生工作站揭牌仪式在武汉生物技术研究院一楼101会议室举行&#xff0c;湖北中医药大学研究生院院长刘娅教授、基础医学院院长孔明望教授、基础医学院赵敏教授、基础医学院…

ARM Coretex-M核心单片机(STM32)找到hardfault的原因,与hardfault解决方法

1. 前提基础知识&#xff08;ARM异常 压栈流程&#xff09;M核栈增长是地址逐渐减小的 **M3h ARM CM4核心带浮点处理器FPU的&#xff0c;压栈的东西还不一样 进入hardfult后看MSP或者SP的值&#xff0c;看下边第二章图如果hardfult里边啥都没有&#xff0c;就只有个while(1){}…

组件传递props校验

注意&#xff1a;prop是只读的&#xff01;不可以修改父组件的数据。 可以检验传过来的内容是否类型没问题。 App.vue <template><div><!-- <parentDemo/> --><componentA/></div></template> <script> import ComponentA …

机试刷题_NC52 有效括号序列【python】

NC52 有效括号序列 from operator import truediv # # 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可 # # # param s string字符串 # return bool布尔型 # class Solution:def isValid(self , s: str) -> bool:if not s…

threejs:document.createElement创建标签后css设置失效

vue3threejs&#xff0c;做一个给模型批量CSS2D标签的案例&#xff0c;在导入模型的js文件里&#xff0c;跟着课程写的代码如下&#xff1a; import * as THREE from three; // 引入gltf模型加载库GLTFLoader.js import { GLTFLoader } from three/addons/loaders/GLTFLoader.…

一文读懂西门子 PLC 串口转以太网系列模块

在工业自动化领域&#xff0c;随着智能化和信息化的不断发展&#xff0c;设备之间的高效通信变得至关重要。西门子 PLC 作为工业控制的核心设备&#xff0c;其通信方式的拓展需求日益凸显。西门子 PLC 串口转网口产品应运而生&#xff0c;它为实现串口设备与以太网网络的无缝连…