力扣经典题目之->用队列实现栈 的详细讲解和实现,看这一篇就够了!
一:题目

二:思路
1:先看两个概念:


更清晰的对比:


理解这两张图的不同对题目的一个函数( 返回栈顶元素) 会更好做
由图可知 :
返回栈顶函数即返回队列队尾即可
2:题目的理解
用两个队列来实现栈(表面)
用队列的函数来实现栈(深层)
用先进先出的队列函数 来实现后进先出的栈函数 (本质)
3:思路讲解
第一步:

实现栈(后进先出)的出栈,那我们要把队列1的5出掉,但是我们队列(先进先出)只能出1,这个时候,空队列(队列2)就派上用场了。
第二步:

因为队列1只能按照1 2 3 4 5 的顺序来出队列,那我们就先把1 2 3 4放进队列2中。
本质是对队列1使用出队列函数,将出队列1的元素,再用入队列函数入到2中
第三步:

然后再用队列函数出掉5就行,就达到了对原队列 1 2 3 4 5 的出5 的效果了(栈的后进先出) 。
全程使用的都是队列的函数,最后实现了栈的效果
4:思路要点
a:
不为空队列:用来正常的存储数据,将前n-1个元素给空队列后,自己出掉最后的一个元素
为空队列:在实现出栈(出最后一个元素)的时候,空队列接收非空队列的前n-1个元素
所以我们要保证一个队列是空,一个队列不为空!才能够反复的进行出栈,
所以两个队列会交替使用,交替的成为空队列
注意:
写代码之前,我们得先把队列的实现 放在答题代码的前面
关于队列的实现函数,博主已经在前文队列的实现(一篇包懂)-CSDN博客中讲解了,并且已经在此题中应用且通过此题啦,所以放心使用吧!
三:代码展示及其解释
一:myStackCreate(创建栈) 和MyStack 结构体的实现

解释:
1:
因为要求用两个队列来实现栈,所以我们创建两个队列q1,q2
二:myStackPush函数(入栈)

解释:
1:
push,也就是入栈,根据我们前面的思路,我们是存储到非空队列上的 ,所以我们用队列实现中的判断队列是否为空函数QueueEmpty来找出非空的队列,找到后就将数据存储到非空队列中。
三:myStackPop函数(出栈)

解释:
1:根据前文思路,要区分开空队列和非空队列(QueueEmpty),然后将非空队列的前n-1(除了最后一个),移到空队列中,再将非空队列中的最后一个进行出队列,就达到了出栈的效果(后进先出)
2:也就是将非空队列中的前n-1个,用出队列函数(QueueFront)拿出来,再用入队列函数(QueuePush)入到空队列,最后再用出队列函数(QueueFront)拿掉非空队列的最后一个 。
3:达到用队列实现栈的效果。
四:myStackTop函数(返回栈顶元素)

解释:
1:此函数目的是返回栈顶元素,根据前文两张图的对比,我们可知返回栈顶元素即返回队尾元素,直接用我们队列实现中的返回队尾函数(QueueBack)来实现。
五:myStackEmpty函数(判断栈是否空)

解释:
1:
两个队列都空了,就代表栈空。
六:myStackFree函数(销毁栈)

解释:
1:先销毁两个队列里的节点,再销毁obj
对于队列实现的双结构体的解释:
q1 ,q2它本质是Que,而在队列实现中Que是一个结构体,里面是头指针head,尾指针tail和size,只是随着节点增加,这两个指针指向队列里的节点,才能去控制队列,这就不用使用哨兵位了,所以并且q1,q2并不是一个队列。
为什么博主在代码中注释说的是队列呢?
因为不是所有人都是用的博主队列的实现(一篇包懂)-CSDN博客中的实现方法,所以博主注释写的模板化一点,才能尽力让不同的实现队列的方法的人,也能够理解。
所以具体的代码,需要根据自己的实现,来进行微调即可~~
本文思维导图:

相关文章:
力扣经典题目之->用队列实现栈 的详细讲解和实现,看这一篇就够了!
一:题目 二:思路 1:先看两个概念: 更清晰的对比: 理解这两张图的不同对题目的一个函数( 返回栈顶元素) 会更好做 由图可知 : 返回栈顶函数即返回队列队尾即可 2:题…...
[JS]认识feach
介绍 feach是浏览器内置的api, 用于发送网络请求 请求方式对比 AJAX: 基于XMLHttpRequest接收请求, 使用繁琐Axios: 基于Promise的请求客户端, 在浏览器和node中均可使用, 使用简单fetch: 浏览器内置的api, 基于Promise, 功能简单 基础语法 <body><button>发请求…...
tomcat如何进行调优?
从两个方面考虑:内存和线程 首先启动Tomcat,实际上就是启动了一个JVM,所以可以按JVM调优的方式来进行调整,从而达到Tomcat优化的目的。 另外Tomcat中设计了一些缓存区,比如appReadBufSize、bufferPoolSize等缓存区来提…...
复现GMM文章(一):图1代码和数据
介绍 复现GMM文章的的Fig1图。 加载R包 library(tidyr)library(tidyverse)library(dplyr)library(ggsci)library(ggpubr)导入数据 所有的数据可以通过下列链接下载: 百度网盘链接: https://pan.baidu.com/s/1isKEK1G5I6X90KYqLufmWw 提取码: t9ca 图1B 数据 …...
链接追踪系列-07.logstash安装json_lines插件
进入docker中的logstash 容器内: jelexbogon ~ % docker exec -it 7ee8960c99a31e607f346b2802419b8b819cc860863bc283cb7483bc03ba1420 /bin/sh $ pwd /usr/share/logstash $ ls bin CONTRIBUTORS Gemfile jdk logstash-core modules tools x-pack …...
火山引擎数据飞轮实践:在电商场景中,如何建设全链路数据血缘?
数据作为新型生产要素,正支撑企业的数智化转型。但企业数字化建设也存在管理成本高、数据产品使用门槛高、数据资产价值不够的问题,其原因在于业务和数据之间没有形成双向良性驱动。 结合新时代企业数字化转型需求,火山引擎基于字节跳动十余…...
使用加密软件对企业来说有什么好处
泄密时间近年来层出不穷,一旦重要文件或数据被盗,无疑会对企业带来巨大的损失。 2024年3月,我国某高新科技企业遭境外黑客攻击,相关信息化系统及数据被加密锁定,生产经营活动被迫停止。企业生产经营活动受阻ÿ…...
STM32入门开发操作记录(二)——LED与蜂鸣器
目录 一、工程模板二、点亮主板1. 配置寄存器2. 调用库函数 三、LED1. 闪烁2. 流水灯 四、蜂鸣器 一、工程模板 参照第一篇,新建工程目录ProjectMould,将先前打包好的Start,Library和User文件^C^V过来,并在Keil5内完成器件支持包的…...
n3.平滑升级和回滚
平滑升级和回滚 1. 平滑升级流程2. 平滑升级和回滚案例 有时候我们需要对Nginx版本进行升级以满足对其功能的需求,例如添加新模块,需要新功能,而此时 Nginx又在跑着业务无法停掉,这时我们就可能选择平滑升级 1. 平滑升级流程 平…...
C#WPF DialogHost.Show 弹出对话框并返回数据
在WPF中,使用DialogHost.Show方法显示一个对话框并获取返回数据,你需要定义一个对话框,并在对话框关闭时返回数据。以下是一个简单的例子: 首先,在主窗口中添加DialogHost控件: <MaterialDesign:DialogHost x:Name="dialogHost" /> 然后,创建一个对话…...
Kafka Producer发送消息流程之分区器和数据收集器
文章目录 1. Partitioner分区器2. 自定义分区器3. RecordAccumulator数据收集器 1. Partitioner分区器 clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.java,中doSend方法,记录了生产者将消息发送的流程,其中有一步…...
Codeforces Round 958 (Div. 2)
C o d e f o r c e s R o u n d 958 ( D i v . 2 ) \Huge{Codeforces Round 958 (Div. 2)} CodeforcesRound958(Div.2) 文章目录 Problems A. Split the Multiset题意思路标程 Problems B. Make Majority题意思路标程 Problems C. Increasing Sequence with Fixed OR题意思路标…...
<数据集>猫狗识别数据集<目标检测>
数据集格式:VOCYOLO格式 图片数量:3686张 标注数量(xml文件个数):3686 标注数量(txt文件个数):3686 标注类别数:2 标注类别名称:[cat, dog] 序号类别名称图片数框数1cat118811892dog24982498 使用标…...
Figma 中文版指南:获取和安装汉化插件
Figma是一种主流的在线团队合作设计工具,也是一种基于 Web 端的设计工具。在当今的设计时代,Figma 的使用满足了每个人的设计需求,不仅可以实现在线编辑,还可以方便日常管理,有效提高工作效率。然而,相信很…...
用c语言写一个贪吃蛇游戏
贪吃蛇游戏通常涉及到终端图形编程和简单的游戏逻辑。以下是一个基本的实现示例,包括贪吃蛇的移动、食物生成、碰撞检测等功能。 1. 贪吃蛇游戏的基本结构 贪吃蛇游戏可以分为以下几个部分: 游戏地图和终端绘制:使用二维数组表示游戏地图&am…...
计算机网络入门 --网络模型
计算机网络入门 --网络模型 1.OSI七层模型 1.1 模型概念 OSI七层模型是将计算机网络通信协议划分为七个不同层次的标准化框架,每一层都负责不同功能,并从物理连接层开始处理。OSI七层网络模型如下分别为:物理层、数据链路层、网络层、传输…...
陪玩系统小程序模式APP小程序H5系统搭建开发
随着移动互联网的营及和游戏行业的蓬轨发展,陪玩服务应远而生并迅速唱起,陪玩系统小程序作为连接游戏玩家与陪玩师的桥梁,其模式系统的搭建与开发是得尤为重要,本文将洋细凰述陪玩系统小程宗模式系统的搭建开发流程,包…...
算法训练营day72
题目:117. 软件构建 (kamacoder.com) #include<iostream> #include<unordered_map> #include<vector> #include<queue>using namespace std;int main() {int n, m;cin >> n >> m;vector<int> indegree(n, 0);unordered_…...
C语言------指针讲解(2)
目录 一、数组名的理解 二、使用指针访问数组 三、一维数组传参的本质 四、冒泡排序 五、二级指针 六、指针数组 七、指针数组模拟二维数组 一、数组名的理解 通过学习,我们知道:数组名和数组首元素的地址打印出来的结果一模一样,数组…...
大数据技术基础
一、大数据平台 1.大数据平台方案步骤: ①市场上有哪些大数据平台 ②硬件、系统、业务增长等方面 ③方案是否通过 通过后:按照一期目标投入 先虚拟环境部署联系,再实际部署 《大数据架构介绍》《Hadoop架构解析》《Hadoop集群规划》 《H…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...
