【剑指offer - C++/Java】5、用两个栈实现队列

学习交流加

  • 个人qq:
    1126137994
  • 个人微信:
    liu1126137994
  • 学习交流资源分享qq群:
    962535112

牛客网题目链接:用两个栈实现队列

文章目录

  • 1、题目分析
  • 2、代码
    • Java代码:
    • C++代码
  • 3、总结

题目描述:

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

1、题目分析

首先我们知道数据结构中栈与队列的特性是:

  • 栈:数据先进后出
  • 队列:数据先进先出

假设现在队列的两个基本操作为push与pop,两个辅助的栈为stack1与stack2。那么可以这实现队列的性质:

当我们push数据的时候,只把数据往stack1中压入。因为压入到stack1中的数据是先进后出,顺序是反的,所以当需要pop数据时,再将stack1中的数据全部倒入(弹出)到stack2,这样的话,数据的顺序就变回来了,此时再在stack2中弹出数据返回即可。例如往stack1中压入1-5,此时在stack1中由上往下是5-1,当想pop时,先将 stack1中的5-1倒入stack2,那么在stack2中由上往下就是1-5,此时再让stack2弹出1即可,这就模拟了先进先出规则。如下图所示:

在这里插入图片描述

以上只是很简单的情况(第一次倒数据)。还有这种情况,1-5已经倒入到stack2中,然后stcak1中没有数据了,如果现在push,就将数据压入到stack1中。如果再pop呢?首先需要判断stack2中还有没有数据,如果stack2中还有数据,则继续弹出stack2中的数据。如果stack2中没有数据了,则将stack1中的所有数据全部倒入stack2中,然后从stack2中弹出数据(自己想一下这个过程)。那么这就是一个完全模拟队列的过程。

2、代码

Java代码:

import java.util.Stack;public class Solution {Stack<Integer> stack1 = new Stack<Integer>();Stack<Integer> stack2 = new Stack<Integer>();public void push(int node) {stack1.push(node); //stack1 用于push数据}/* stack2用于pop数据 */public int pop() {/* 对于题来说,可以不用判断异常情况也可以通过 */if(stack1.isEmpty() && stack2.isEmpty()){throw new RuntimeException("Queue is empty!");}/* 如果Stack2为空,则将stack1中的数据全部倒进stack2 */if(stack2.isEmpty()){while(!stack1.isEmpty()){stack2.push(stack1.pop());}}return stack2.pop();}
}

C++代码

class Solution
{
public:void push(int node) {/* stack1作为插入数据的栈 */stack1.push(node);}int pop() {/* stack2作为pop数据的栈 */int tmp=0;if(stack2.empty()){while(!stack1.empty()){tmp=stack1.top();stack1.pop();stack2.push(tmp);}}tmp=stack2.top();stack2.pop();return tmp;}
private:stack<int> stack1;stack<int> stack2;
};

3、总结

理解栈与队列的push与pop操作。

学习探讨加:
qq:1126137994
微信:liu1126137994

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

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

相关文章

【剑指offer - C++/Java】6、旋转数组的最小数字

题目链接&#xff1a;旋转数组的最小数字 文章目录1、题目描述2、题目分析3、代码3.1 Java代码3.2、C代码4、总结1、题目描述 把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转&#xff0c;输出旋转数组的最小…

设计模式-责任链模型

责任链模式场景: OA审批系统 CEO 审批项目 经费 500万<x ≤\leq≤ 1000万总监 审批的经费 300万 < x ≤\leq≤ 500万总监秘书 审批的经费 100万< x ≤\leq≤ 300万研发经理 审批的经费 50万 <x ≤\leq≤ 100万 传统方式 是 (接收到请求后&#xff0c;根据相应金额&…

【OS学习笔记】三 计算机的启动过程

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 上一篇文章迈进了汇编的大门&#xff0c;点击链接查看上一篇文章&#xff1a;汇编语言和汇编软件 上一篇文章大概学会以下内容&#xff1a; 了解汇编…

【OS学习笔记】四 什么是虚拟机

虚拟机是软件 对于第一次听说虚拟机&#xff08;Virtual Machine&#xff0c;VM&#xff09;的人来说&#xff0c;可能以为还要再花钱买一台计算机&#xff0c;这恐怕是他们最担心的。所谓虚拟机&#xff0c;就是在你的计算机上再虚拟出另一台计算机来。这台虚拟出来的计算机&…

TCP/IP协议族之运输层(TCP流量控制和拥塞控制 [1])

TCP的流量控制 1. 利用滑动窗口实现流量控制 如果发送方把数据发送得过快&#xff0c;接收方可能会来不及接收&#xff0c;这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快&#xff0c;要让接收方来得及接收。 利用滑动窗口机制可以很方便地在TCP连接上实现…

英语词源记忆法

英语词源记忆法后续持续更新中

【OS学习笔记】五 VirtualBox的下载、安装和配置

上一篇文章学习了&#xff1a;计算机的启动过程&#xff08;点击链接查看上一篇文章&#xff09; 今天来接着上一篇文章&#xff0c;解决我们学习中的实验环境问题。 参考&#xff1a;X86汇编语言-从实模式到保护模式。作者李忠。纯学习笔记。如有侵权请联系我删除 1、下载O…

spring体系思维导图

spring体系思维导图1. spring 思维导图2. springboot 思维导图3. springcloud 思维导图之前整理的&#xff0c;后续持续更新中1. spring 思维导图 2. springboot 思维导图 3. springcloud 思维导图

idea模板

idea模板1.类注解模板2.方法注解模板3.自定义代码生成模板每次下载新版本的idea 或者换笔记本都需要重新&#xff0c;配置注解&#xff0c;而且从网上找了很多都或多或少有问题&#xff0c;每次要花费一些时间配置&#xff0c;这里整理一下。自定义代码生成模版&#xff0c;设置…

【OS学习笔记】六 实模式:编写主引导扇区代码

上一篇文章学习了&#xff1a;计算机的启动过程&#xff08;点击链接查看上一篇文章&#xff09; 这篇文章学习记录为&#xff1a;编写主引导扇区代码。 参考&#xff1a;《X86汇编语言-从实模式到保护模式》-李忠。纯学习笔记&#xff0c;更详细内容请阅读正版书籍。如有侵权…

【OS学习笔记】七 Bochs的下载、安装和配置

参考&#xff1a;《X86汇编语言-从实模式到保护模式》-李忠。纯学习笔记&#xff0c;更详细内容请阅读正版书籍。 1 开源的BOCHS虚拟机软件 Bochs是开源软件。它用软件来模拟处理器取指令和执行指令的过程&#xff0c;以及整个计算机硬件。当它开始运行时&#xff0c;就直接模…

【OS学习笔记】八 实模式:编写主引导扇区代码-另一种更高效的写法

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 上一篇文章&#xff0c;我们用比较原始的方法编写了主引导扇区的代码。点击链接查看上一篇文章&#xff1a;编写主引导扇区代码 本片文章将学习以下内…

【OS学习笔记】九 实模式:从汇编的角度理解栈结构

上一篇文章以一种更加高效的方法编写了主引导扇区的代码。主要是引入了循环和跳转指令。点击链接查看上一篇文章&#xff1a;编写主引导扇区代码-另一种更高效的写法 本篇文章&#xff0c;继续上一篇文章的学习。同样还是编写汇编代码加载到主引导扇区让CPU直接执行。但是我们…

【OS学习笔记】十 实模式:实现一个程序加载器-程序加载器如何将用户程序加载到内存并执行

上一篇文章学习了以下内容&#xff1a; 用一种不同的分段方法&#xff0c;从另一个不同的的角度理解处理器的分段内存访问机制使用循环和条件转移指令来优化主引导扇区代码 点击链接查看上一篇文章&#xff1a;点击链接查看 对于主引导扇区部分。大概前几篇文章已经学的差不…

【OS学习笔记】十一 实模式:中断-软中断和硬中断基本原理

上一篇文章我们模拟操作系统的加载器程序&#xff0c;使用汇编语言实现了一个程序加载器&#xff1a;点击链接查看上一篇文章&#xff1a;程序加载器的实现原理 本篇文章&#xff0c;是实模式学习的结尾。在经过了那么多坎坷&#xff0c;终于学完了8086的实模式&#xff01;&a…

配置节处理程序时出错,未能加载文件或程序集

安装sql server2008时&#xff0c;出现下面的错误&#xff1a; 按照上面的提示&#xff0c;查看那个路径下的文件&#xff0c;根据文件名判断可能是临时文件&#xff0c;于是首先将上面的文件剪切出来&#xff0c;然后安装&#xff0c;成功。 转载于:https://www.cnblogs.com/x…

【软件开发底层知识修炼】六 Binutils辅助工具之- addr2line与strip工具

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 上一篇文章我们学习了gcc编译器的相关内容。点击查看上一篇文章&#xff1a;gcc编译器。本篇文章接着上一篇文章&#xff0c;学习GNU为GCC提供的辅助开…

Eboot 中给nandflash分区实现

提到分区就不得不提到MBR&#xff0c;不得不提到分区表。 什么是MBR 硬盘的0柱面、0磁头、1扇区称为主引导扇区&#xff0c;NANDFLASH由BLOCK和Sector组成&#xff0c;所以NANDFLASH的第0 BLOCK&#xff0c;第1 Sector为主引导扇区&#xff0c;FDISK程序写到该扇区的内容称为主…

kmp匹配算法

kmp匹配算法1.第一种方式是暴利匹配方式2.第二种方式采用kmp 方式进行匹配3. 相应的代码1.第一种方式是暴利匹配方式 暴利匹配规则 模型: str1 位源字符串下标为i&#xff0c;str2位匹配字符串,下标为j 。 假设 str1 匹配到i , str2 匹配到j 则有 &#xff08;1&#xff09;当 …