数据结构 栈实现队列

题目描述:

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

实现 MyQueue 类:

  • void push(int x) 将元素 x 推到队列的末尾
  • int pop() 从队列的开头移除并返回元素
  • int peek() 返回队列开头的元素
  • boolean empty() 如果队列为空,返回 true ;否则,返回 false

在做这道题目前要明白什么是栈什么是队列

栈就是后进先出的一个容器

队列就是先进先出的一个容器

然后了解栈的创建:stack<int>  jinzihao;这样就创建了一个int类型名为jinzihao的栈了

下面是对栈中元素的操作:

jinzihao.push(x);表示往jinzihao这个栈里面尾部插入一个元素值为x

jinzihao.top(x);表示查找jinzihao这个栈的顶部元素值

jinzihao.pop(x); 表示弹出栈中最顶部的元素,此时栈的大小 - 1

jinzihao.empty(x);表示判断jinzihao这个栈中是否为空,如果空返回true

有了上面的知识,下面我们来看看思路:

为了模拟队列,我们要用两个栈来实现

首先写函数

void push(int x) 将元素 x 推到队列的末尾

直接使用push将x值放入stin的栈中

下面是函数

int pop() 从队列的开头移除并返回元素

注意要返回并且移除,如果我们直接使用pop只能删除stin中的最后进入的元素

所以我们要使用另外一个栈

两个栈分别为stin和stout

pop的操作分为两个情况

一:pop前函数里面没有内容(需要把stin的内容转移到stout中)

操作:stout.push(stin.top());表示把in最上面的数导入stout中

然后删除最上面的数

后面的操作和步骤二一样

二:首先找到stout.top()  并且保存到变量中

然后通过stout.pop()删除

最后把变量返回

    int pop() {
        // 只有当stOut为空的时候,再从stIn里导入数据(导入stIn全部数据)
        if (stOut.empty()) {
            // 从stIn导入数据直到stIn为空
            while(!stIn.empty()) {
                stOut.push(stIn.top());
                stIn.pop();
            }
        }
        int result = stOut.top();
        stOut.pop();
        return result;
    }

 三:函数peek 查找列表首个元素

这个函数的实现就需要用到我们刚刚写的pop函数,

思路:首先 int    a   =  this -> pop;

这样可以把a赋值最上面的值

但是为了不影响内容要通过push把a重新放回去

最后return a;

代码:

    int peek() {
        int res = this->pop(); // 直接使用已有的pop函数
        stOut.push(res); // 因为pop函数弹出了元素res,所以再添加回去
        return res;
    }

 

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

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

相关文章

微服务之分布式理论zookeeper概述

一、分布式技术相关的理论 CAP理论 CAP定理(CAP theorem)&#xff0c;⼜被称作布鲁尔定理(Eric Brewer)&#xff0c;1998年第⼀次提出. 最初提出是指分布式数据存储不可能同时提供以下三种保证中的两种以上: (1) ⼀致性(Consistency): 每次读取收到的信息都是最新的; (2) …

探索主播美颜工具与直播美颜SDK的技术奥秘

主播的形象美化是至关重要的一环&#xff0c;而实现这一目标的关键在于美颜工具和直播美颜SDK。接下来&#xff0c;我们将一同深入探索这些技术的奥秘&#xff0c;揭示它们背后的原理和工作方式。 一、美颜工具的背后 美颜工具是一类应用软件&#xff0c;旨在通过图像处理技术…

树莓派点亮LED灯

简介 使用GPIO Zero library 的 Python库实现点亮LED灯。接线 树莓派引脚参考图如下&#xff1a; LED正极 接GPIO17 LED负极 接GND 权限 将你的用户加到gpio组中&#xff0c; 否则无法控制GPIO sudo usermod -a -G gpio 代码 from gpiozero import LED from time impor…

基于H.264的RTP打包中的组合封包以及分片封包结构图简介及抓包分析;FU-A FU-B STAP-A STAP-B简介;

H.264视频流的RTP封装类型分析&#xff1a; 前言&#xff1a; 1.RTP打包原则&#xff1a; RTP的包长度必须要小于MTU(最大传输单元)&#xff0c;IP协议中MTU的最大长度为1500字节。除去IP报头&#xff08;20字节&#xff09;、UDP报头&#xff08;8字节&#xff09;、RTP头&a…

【Axure高保真原型】拖动穿梭选择器

今天和大家分享拖动穿梭选择器的原型模板&#xff0c;我们可以拖动两个选择器里的选项标签&#xff0c;移动到另外一个选择器里。那这个原型模板是用中继器制作的&#xff0c;所以使用也很方便&#xff0c;只需要在中继器表格里填写选项信息&#xff0c;即可自动生成交互效果&a…

传神社区本月亮点:4月功能更新全览

传神社区始终保持着对技术进步与用户体验的执着追求&#xff0c;持续升级更新&#xff0c;力求完善各项功能&#xff0c;以满足用户多样化的需求。本月&#xff0c;传神社区升级了4个方面的功能&#xff0c;让我们一同揭开这些功能的神秘面纱吧&#xff01; 1 资产管理功能增强…

stm32cubeMX智能小车蓝牙模块

本文使用的代码是 HAL 库。 文章目录 前言一、蓝牙模块介绍二&#xff0c;AT指令测试蓝牙模块三&#xff0c;原理图分析四&#xff0c;cubeMX 配置五&#xff0c;编写代码总结 前言 实验小车&#xff1a;STM32F103C8T6。 蓝牙模块&#xff1a;HC-05。 所需软件&#xff1a;kei…

Jdk 内存伪共享

一、什么是伪共享 数据X、Y、Z被加载到同一Cache Line中&#xff0c;线程A在Core1上修改X&#xff0c;而修改X会导致其所在的所有核上的缓存行均失效&#xff1b;假设此时线程B在Core2上读取Y&#xff0c;由于X所在的缓存行已经失效&#xff0c;所有Core2必须从内存中重新读取。…

碳排放预测(粉丝免费) | 基于深度学习的碳排放预测模型

效果分析 基本介绍 基于深度学习的碳排放预测模型 碳排放量预测是碳中和目标达成工作中的重要组成部分。为了实时预测碳排放量,本文深度学习在数据特征提取方面的优势和长短期记忆人工神经网络解决时间序列各个观测值依赖性问题的特点,提出了一种基于深度学习的碳排放量预测模…

springboot图书个性化推荐系统的设计与实现+1w字文档

项目演示视频: 【源码免费送】基于springboot图书个性化推荐系统的设计与实现录像 摘 要 本论文主要论述了如何使用JAVA语言开发一个图书个性化推荐系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项…

Linux基础-socket详解、TCP/UDP

文章目录 一、Socket 介绍二、Socket 通信模型三、Socket 常用函数1 创建套接字2 绑定套接字3、监听连接4、接受连接5、接收和发送数据接收数据发送数据 6、关闭套接字 四、Socket编程试验1、源码server.cclient.c 2、编译&#xff1a;3、执行结果 五、补充TCP和UDP协议的Socke…

Agisoft Metashape 自定义底图

Agisoft Metashape 自定义底图 前言 Agisoft Metashape 从2.0.2 版本开始,Agisoft Metashape Professional 和 Agisoft Viewer 支持自定义底图,可用于模型和正射视图模式。本文以添加Esri World Image卫星底图图源为例,介绍Agisoft Metashape 自定义底图的方法。 添加自定…

YOLOV8 pycharm

1 下载pycharm 社区版 https://www.jetbrains.com/zh-cn/pycharm/download/?sectionwindows 2 安装 3 新建 4 选择 文件-> setting 配置环境变量 5 添加conda 环境

vite打包配置

目录 minify默认是esbuild&#xff0c;不能启动下面配置 使用&#xff1a; plugins: [viteMockServe({mockPath: mock})]根目录新建mock/index.ts. 有例子Mock file examples&#xff1a;https://www.npmjs.com/package/vite-plugin-mock-server 开发环境生产环境地址替换。根…

php7.4在foreach中对使用数据使用无法??[]判读,无法使用引用传递

代码如下图&#xff1a;这样子在foreach中是无法修改class_history的。正确的应该是去掉??[]判断。 public function actionY(){$array [name>aaa,class_history>[[class_name>一班,class_num>1],[class_name>二班,class_num>2]]];foreach ($array[class_…

营收不过万,世道艰难,月末总结复盘ing

2024已经走过了1/3&#xff0c;从事实上看确实如大佬们所说世道越来越难&#xff0c;过往的几个月份营收只有区区10000。向下兼容的话从绝对值上看收入确实不少了&#xff0c;从相对值上看又少的可怜&#xff0c;只能满足温饱而已。 这个月上半场成绩非常喜人&#xff0c;半个月…

IDEA在setting中已经勾选了Use non-modal commit interface选项,还是不显示commit侧边栏

今天在拉取项目后&#xff0c;发现我得项目不显示commit的侧边栏&#xff0c;导致我的项目修改没有一个提示。 去网上搜了一些方案&#xff0c;都是让修改seting中的下图中的选项 但是我勾选上还是没有任何效果&#xff0c;侧边栏还是不显示commit的选项。 然后经过重重检索&…

C语言——柔性数组

1、柔性数组是什么 在C语言中&#xff0c;柔性数组成员&#xff08;Flexible Array Member&#xff0c;简称FAM&#xff09;是C99标准中引入的一种结构体成员&#xff0c;用于表示一个大小可变的数组。它是结构体的最后一个成员&#xff0c;不像普通的数组&#xff0c;没有固定…

spring boot运行过程中动态加载Controller

1.被加载的jar代码 package com.dl;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication public class App {public static void main(String[] args) {SpringApplication.run(A…

stm32f103c8t6学习笔记(学习B站up江科大自化协)-UNIX时间戳、BKPRTC

UNIX时间戳 UNIX时间戳最早是在UNIX系统使用的&#xff0c;所以叫做UNIX时间戳&#xff0c;之后很多由UNIX演变而来的系统也继承了UNIX时间戳的规定&#xff0c;目前linux&#xff0c;windows&#xff0c;安卓这些操作系统的底层计时系统都是用UNIX时间戳 时间戳这个计时系统和…
最新文章