【算法与数据结构】232、LeetCode用栈实现队列

news2024/10/7 14:33:26

文章目录

  • 一、题目
  • 二、解法
  • 三、完整代码

所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。

一、题目

在这里插入图片描述
在这里插入图片描述

二、解法

  思路分析:这道题要求我们用栈模拟队列(工作上一定没人这么搞)。程序当中,push函数很好解决,直接将元素push进输入栈当中。pop函数需要实现队列先进先出的操作,而栈是先进后出。只用一个栈是无法实现,需要两个栈,一个输入栈,一个输出栈。输入栈当中,先进栈的元素在栈底所以后出,此时我们将输入栈的元素push进输出栈,先进的元素就在栈顶,会先输出,这样就实现了先进先出的队列。peek函数复用了pop函数,实现代码缩减。最后empty函数,只要输入栈和输出栈同时为空那么队列就是空的。
  程序如下

class MyQueue {
public:
    stack<int> stIn;
    stack<int> stOut;
    MyQueue() { // 构造函数

    }

    void push(int x) {
        stIn.push(x);
    }

    int pop() {
        if (stOut.empty()) {   // 只有当Out栈为空的时候,才将In栈的元素全部导入Out栈
            while (!stIn.empty()) { 
                stOut.push(stIn.top());
                stIn.pop();
            }
        }
        int result = stOut.top();
        stOut.pop();
        return result;
    }

    int peek() {
        int res = this->pop();  // 直接使用已经写好的pop函数
        stOut.push(res);        // 已经弹出,再添加回去
        return res;
    }

    bool empty() {
        return stIn.empty() && stOut.empty();
    }
};

复杂度分析:

  • 时间复杂度: push和empty为 O ( 1 ) O(1) O(1), pop和peek为 O ( n ) O(n) O(n)
  • 空间复杂度: O ( n ) O(n) O(n)

三、完整代码

# include <iostream>
# include <stack>
using namespace std;

class MyQueue {
public:
    stack<int> stIn;
    stack<int> stOut;
    MyQueue() { // 构造函数

    }

    void push(int x) {
        stIn.push(x);
    }

    int pop() {
        if (stOut.empty()) {   // 只有当Out栈为空的时候,才将In栈的元素全部导入Out栈
            while (!stIn.empty()) { 
                stOut.push(stIn.top());
                stIn.pop();
            }
        }
        int result = stOut.top();
        stOut.pop();
        return result;
    }

    int peek() {
        int res = this->pop();  // 直接使用已经写好的pop函数
        stOut.push(res);        // 已经弹出,再添加回去
        return res;
    }

    bool empty() {
        return stIn.empty() && stOut.empty();
    }
};

int main()
{
    int x = 10;
    MyQueue* obj = new MyQueue();
    obj->push(x);
    obj->push(x);
    int param_2 = obj->pop();
    int param_3 = obj->peek();
    bool param_4 = obj->empty();
	system("pause");
	return 0;
}

end

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

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

相关文章

【cuda】cuda-12.0对应tensorflow-gpu安装

我的cuda是12.0的&#xff0c;先根据下面的链接装了cudnn (12条消息) Windows10系统CUDA和CUDNN安装教程_windows安装cudnn_流泪&#xff06;枯萎的博客-CSDN博客 (12条消息) 【精简】2023年最新Windows安装GPU版本的tensorflow&#xff08;含bug记录及解决&#xff09;_tenso…

js引入json文件

引入json文件有多种方法&#xff0c;这里记录一种方法&#xff1a; 1、有json文件 文件内容 2、上传到服务器获得url&#xff08;也可以不上传&#xff09; 获取url:“https://asc-test1.oss-cn-beijing.aliyuncs.com/2023/07/05/b1917481d4eb40628bc6d10113896d82taizhou.jso…

玩机搞机---小米刷机工具平台刷写报错对症解决方法

安卓玩机搞机技巧综合资源-----全安卓机型通用线刷 卡刷教程。新老机型可参考【十八】 小米刷机平台工具版本较多。有时候更换工具版本刷机会有不同的提示。虽然目前很多第三方包都采用脚本方式刷写&#xff0c;但我们具体要了解使用官方工具报错究竟是什么原因。常见的报错有…

Ae 效果:CC Vignette

风格化/CC Vignette Stylize/CC Vignette CC Vignette&#xff08;CC 暗角&#xff09;效果可以用于各种场景&#xff0c;例如添加电影感、突出焦点、调整色调或增加视觉吸引力。使用 CC Vignette&#xff0c;可以轻松地为图像或视频创建独特的暗角效果&#xff0c;使其更具艺术…

【Git原理与使用】-- 标签管理

目录 理解标签 创建标签 操作标签 删除 推送 理解标签 标签 tag &#xff0c;可以简单的理解为是对某次 commit 的⼀个标识&#xff0c;相当于起了⼀个别名。例如&#xff1a;在项目发布某个版本的时候&#xff0c;针对最后⼀次 commit 起⼀个 v1.0 这样的标签来标识里程碑…

C++初阶之类和对象(下)

类和对象&#xff08;下&#xff09; 1. 再谈构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字 2. static成员2.1 概念2.2 特性 3. 友元3.1 友元函数3.2 友元类 4. 内部类5.匿名对象6.拷贝对象时的一些编译器优化结语 1. 再谈构造函数 1.1 构造函数体赋值 在创建…

AIGC - Stable Diffusion 的 AWPortrait 1.1 模型与 Prompts 设置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131565908 AWPortrait 1.1 网址&#xff1a;https://www.liblibai.com/modelinfo/721fa2d298b262d7c08f0337ebfe58f8 介绍&#xff1a;AWPortrai…

win10+cuda11.8+opencv4.5.5使用cuda运行yolov5

环境&#xff1a;win10 cuda11.8(尝试使用最新的12.1无法安装&#xff09; Vs2019(尝试Vs2015无法源码安装&#xff09;opencv4.5.5 cmake-gui 3.26.4&#xff0c;电脑GPU是4080 1、安装Vs2019和cuda11.8&#xff0c;下载opencv4.5.5和对应的opencv_contrib-4.5.5&#xff0c;下…

Android Studio实现内容丰富的安卓校园新闻浏览平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号070 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看新闻列表…

Python安装完成后执行pip命令报错:‘pip‘ 不是内部或外部命令,也不是可运行的程序

解决办法&#xff1a; 已安装pip的情况下&#xff0c;把这个Scripts文件夹的目录添加到Path环境变量即可。   我的电脑 -> 右键 属性 -> 高级系统设置 -> 环境变量 -> path -> 编辑&#xff1a;加入Scripts文件夹的目录    确定即可

《一》Midjourney 傻瓜式入门教程

Midjourney 傻瓜式教程-注册入门篇 Midjourney 是基于 ChatGPT 的衍生 AI 绘画工具&#xff0c;可以用来绘制书本内的插图&#xff0c;绘本&#xff0c;漫画&#xff0c;海报&#xff0c;头像等等。总之&#xff0c;只有想不到&#xff0c;没有做不到的图。 Midjourney上手简…

Python GUI设计-PyQt5从入门到实践(第1-3章)

第一章 Python 与 Pyqt5 良好的开端&#xff0c;等于成功的一半 ————柏拉图 1.1 python语言简介 1.1.3 Python的应用领域 Web开发、大数据处理、人工智能、自动化运维开发、云计算、爬虫、游戏开发。 1.2 GUI 与 PyQt5 第二章 搭建开发环境 2.1 Python的下载与安装 Pyt…

Java JSP实战

综合实战&#xff1a; 实现利用servletservicedao实现查询所有&#xff0c;对象&#xff0c;增删改&#xff0c; t_house(int no,String housename,Double height) 步骤1&#xff1a;创建maven工程 步骤2&#xff1a;创建工程包entity,dao,util,service,servlet 步骤3&#x…

第一章:基本概念

什么是数据结构 &#xff1f; 其实官方没有统一定义&#xff01;&#xff01;&#xff01; “数据结构是数据对象&#xff0c;以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这种联系可以通过定义相关的函数给出。” - Sartaj Sahni 《数据结构、算法与应用》 …

期权卖方到期可以不平仓?期权卖方高胜率策略的实战技巧

期权是一种金融衍生品&#xff0c;它给予买方在未来某个时间以特定价格买入或卖出某种资产的权利&#xff0c;而不是义务。期权的卖方则承担了相应的义务&#xff0c;即在买方行使期权时按照约定的价格交割资产。期权的价格叫做期权费&#xff0c;它由期权的内在价值和时间价值…

【设计模式】第二十二章:中介者模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章&#xff1a;单例模式 【设计模式】第二章&#xff1a;工厂模式 【设计模式】第三章&#xff1a;建造者模式 【设计模式】第四章&#xff1a;原型模式 【设计模式】第五章&#xff1a;适配器模式 【设计模式】第六章&…

怎么用迅捷视频转换器将MP4格式视频转成AVI格式

我们平时看视频的时候&#xff0c;会发现视频都有不同的格式&#xff0c;例如MP4、AVI、MKV等等。其中AVI是一种音频视频交错格式&#xff0c;就是可以将视频和音频交织在一起进行同步播放&#xff0c;这种视频格式的优点是可以跨多个平台使用&#xff0c;在日常生活和工作中&a…

CSDN创作常用操作说明

CSDN创作 目录标题文本样式列表图片连接代码表格UML图Mermaid流程图Flowchart流程图classDiagram类图快捷键 目录 创建目录的方式&#xff1a; [TOC](目录)标题 # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题文本样式 **加粗文本** ~…

NDK编译ffmpeg包含硬件加速vulkan和mediacodec

NDK编译ffmpeg包含硬件加速vulkan和mediacodec flyfish ffmpeg&#xff1a;ffmpeg-6.0 NDK&#xff1a;android-ndk-r25c 硬件加速&#xff1a;vulkan 和 mediacodec target CPU&#xff1a;armv8-a host&#xff1a;Ubuntu 22.04 因为这里要编译硬件加速版本的ffmpeg-6.0&a…

微服务学习2——利用nacos实现服务治理

&#xff08;本文参考黑马程序员项目&#xff09; 个人仓库地址&#xff1a;https://gitee.com/jkangle/springboot-exercise.git 1.当前项目中存在的问题 不同微服务之间的调用通过硬编码的形式&#xff0c;这样可能在需要打量修改的时候出现问题&#xff0c;因此引入了服务…