教你如何用两个栈实现一个队列

2023-10-27

一,实现思路

1,首先准备两个栈,栈A与栈B
2,栈A专门用来完成入队列操作,栈B专门用来出队列与取队首元素操作
3,每次入队列操作时,首先得判断B栈是否为空,不空则将B栈元素全都依次入A栈,最后继续入新元素(即将要入栈元素添加到栈A)
4,每次出队列与取队首元素操作时,将A栈中的元素依次入B栈,出队列即取出B栈中的元素,取队首元素即取B栈栈顶元素即可
注意:如果不够清楚思路,也可阅读代码,清晰的注释总会让你理解

二,实现代码

import java.util.Stack;

public class MyQueueByStack {
    //先创建两个栈
    private Stack<Integer> A = new Stack<>();  //用来入队列
    private Stack<Integer> B = new Stack<>();  //用来出队列
    public void push(int val){  //入队列
        // 如果栈B不为空,先将B中的元素倒腾到栈A
        while(!B.isEmpty()){
            int tmp = B.pop();
            A.push(tmp);
        }
        //接着入栈只需将元素放入栈A
        A.push(val);
    }
    public Integer pop(){  //出队列
        if(empty()){
            return null; //如果队列为空(即AB栈都为空)直接返回null
        }
        while(!A.isEmpty()){  //当A栈不为空,将A中的元素倒腾到B
            int tmp = A.pop();
            B.push(tmp);
        }
        return B.pop(); //直接返回B的出栈元素,即为出队列的元素
    }
    public Integer peek(){  //取队首元素
        if(empty()){
            return null; //如果队列为空(即AB栈都为空)直接返回null
        }
        while(!A.isEmpty()){  //当A栈不为空,将A中的元素倒腾到B
            int tmp = A.pop();
            B.push(tmp);
        }
        return B.peek(); //直接返回B的栈顶元素,即为出队列的栈顶元素
    }
    public boolean empty(){
        return A.isEmpty() && B.isEmpty();  //如果AB栈都为空则表示队列为空
    }

    public static void main(String[] args) {
        MyQueueByStack queue = new MyQueueByStack();
        queue.push(1);
        queue.push(2);
        queue.push(3);
        queue.push(4);
        System.out.println(queue.peek());
        System.out.println(queue.pop());
        System.out.println(queue.pop());
        System.out.println(queue.pop());
        System.out.println(queue.pop());
    }
}

测试结果:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

教你如何用两个栈实现一个队列 的相关文章

  • Windows小技巧9--常见命令、脚本、错误解决方法

    Windows小技巧9 常见命令 脚本 错误解决方法 本文主要记录Windows下常见的快捷键 命令 脚本案例 常见错误及解决方法 后续会以此为基础持续更新补充相关内容 1 常见命令 1 1 Windows下的常见快捷键 1 win R 打
  • Pandas数据库查询更新create_engine用法,以及一些警告及弃用处理

    警示情况 UserWarning pandas only supports SQLAlchemy connectable engine connection or database string URI or sqlite3 DBAPI2
  • vue 插件开发过程

    在使用vue 开发的过程中 有时候可能需要用到this来触发组件 如我们经常用道德loading插件 下面记录了一次插件的开发过程 首先建立一个 vue文件 文件中包含了你插件中的一切逻辑 例如
  • CMake:Tutorial-Step4

    Step4 Installing and Testing 安装和测试 本小结简介简单的安装和测试命令配置 0 安装规则 安装语法很简单 对于MathFunctions我们想要的是安装库和头文件 对于应用程序我们想要的是安装可执行程序和con
  • 跳跃游戏-计蒜客

    给定一个非负整数数组 假定你的初始位置为数组第一个下标 数组中的每个元素代表你在那个位置能够跳跃的最大长度 请确认你是否能够跳跃到数组的最后一个下标 例如 A 2 3 1 1 4 A 2 3 1 1 4 能够跳跃到最后一个下标 输出true
  • 人口生育老龄化政策数据表(1971-2023年)

    人口生育老龄化政策是指政府为应对人口老龄化现象 通过制定一系列政策措施 促进人口增长 优化人口结构和保障老年人福利的过程 人口生育老龄化政策数据表可以进行以下科研 1 人口增长政策 政府采取 鼓励生育的措施 如提供生育津贴 延长产假 提高生
  • RAM、ROM、SRAM、DRAM、SSRAM、SDRAM、FLASH、EEPROM的区别

    RAM Random Access Memory 随机存储器 存储单元的内容可按需随意取出或存入 且存取的速度与存储单元的位置无关的存储器 这种存储器在断电时将丢失其存储内容 故主要用于存储短时间使用的程序 按照存储信息的不同 随机存储器又
  • java英文面试常见问题归纳

    1 Tell me a little about yourself I hava been working as a computer programmger over fives years I have the ability to d
  • Python-reduce()

    functools reduce function iterable initializer 将两个参数的 function 从左至右积累地应用到 iterable 的条目 以便将该可迭代对象缩减为单一的值 例如 reduce lambda
  • vb基于SC结构服装专卖店设计与实现

    摘 要 本论文描述了 服装专卖店店管理系统 的设计与实现 在我国数量众多的企业中 中小企业占了绝大多数 这些企业也不可避免地要加入国际化企业的竞争行列 而实现企业信息化是参与挑战的必要条件 但是中小企业的多样性及其灵活多变的经营方式 加上相
  • 【Python 3.7】立方:数字的三次方被称为其立方。请绘制一个图形,显示前 5个整数的立方 值,再绘制一个图形,显示前 5000个整数的立方值。

    题目 Python 3 7 立方 数字的三次方被称为其立方 请绘制一个图形 显示前 5个整数的立方值 再绘制一个图形 显示前 5000个整数的立方值 前 5个整数的立方值的程序为 import matplotlib pyplot as pl
  • TPS5430设计24v转15v电源

    目录 前言 一 芯片输入输出特性 1 输出电压 2 输出电流 3 输出功率 二 芯片各引脚的设计和外围电路元器件的选型 1 ENA脚 2 VIN脚的输入电容 3 输入纹波 4 分压电阻 5 输出电感 6 输出电容 7 BOOT电容器 8 环
  • linux基本命令,一份就够了,初学者指南,基于centos和redhat

    一 文件或者文件本身 ls a 显示隐藏文件 l 长格式显示 h 人性化显示 显示文件大小 d 显示目录本身非目录里面的内容 touch 可改变文件时间戳 mkdir 创建多个目录mkdir a b c p 创建多级目录 mkdir a b
  • SpringBoot2.0(过滤器,监听器,拦截器)

    目录 一 过滤器 1 1 自定义Filter 1 2 启动类代码 1 2 创建filter类和LoginFilter包 1 2 1 编写loginFilter类 过滤器代码 1 2 2 创建二个Controller类 二 监听器 2 1 自
  • 2023年智能车辆国际会议(ICoIV 2023)

    2023年智能车国际会议 ICoIV 2023 重要信息 会议网址 www icoiv org 会议时间 2023年5月26 28日 召开地点 中国长沙 截稿时间 2023年3月20日 录用通知 投稿后2周内 收录检索 EI Scopus
  • 利用php的mail()函数发送邮件

    利用PHP的mail函数发送邮件 mail 函数的作用 连接到邮件服务器 利用smtp协议 与该服务器交互并投邮件 注意 1 mail函数不支持esmtp协议 即只能直投不能登录 2 由上条知 我们只能直投至最终的收件服务器地址 而该地址需
  • Vuex——控制侧边栏是否折叠使用vuex,本次简单使用到了state,mutations

    项目中在store vuex js 使用vuex管理isCollapse export default state isCollapse false 默认不折叠 mutations collapseMenu state state isCo
  • 中国蚁剑安装使用教程

    中国蚁剑安装使用教程 前言 一 中国蚁剑安装 二 中国蚁剑使用 2 1中国蚁剑连接木马 2 2中国蚁剑设置代理 2 3中国蚁剑参数设置 2 4中国蚁剑其他使用 三 中国蚁剑绕过Waf 3 1 编码绕过WAF 3 2插件绕过waf 3 3 修
  • windows ce操作系统能用哪个导航_Windows 和 Linux 比较

    1 操作系统设计复杂度对比 就操作系统复杂度windows server 要比 linux server 更复杂 2 市场占有率对比 特指的服务器市场占有率 非PC桌面 1 linux 大多数版本是免费的 windows 收费 在大规模集群
  • 基于matlab的长短期神经网络lstm的股票预测

    目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的股票预测 MATALB编程实现 附有代码 及链接基于matlab编程的的长短期神经网络LSTM的股票价格的预测 基于深度学习神经网络的股票价格预测 深度学

随机推荐

  • Unity 中控(二)

    前面写到控制投影 接着就是对电脑的开关的控制 依然是先到网上查资料 然后总结下 在同一局域网下 远程开电脑是同通过网卡的Mac地址 UDP广播数据实现开机 关机是调用系统的运行命令 shutdown s m 192 168 0 106 t
  • 10个每个人都用得到的视频下载网站

    1 油管视频下载 www 4kvideodownloader com 2 哔哩哔哩视频解析下载 bilibili iiilab com 3 小视频下载 www downfi com video 4 图二工具 www tool2 cn 5 小
  • Spring MVC-表单(Form)标签-文件上传(File Upload)示例(转载实践)

    以下内容翻译自 https www tutorialspoint com springmvc springmvc upload htm 说明 示例基于Spring MVC 4 1 6 以下示例显示如何使用Spring Web MVC框架在表
  • k8s 之二 kubeadm安装k8s集群

    1 概述 k8s的部署常见的工具和环境 1 IaaS 虚拟机 1 1托管模型 部署在公有云上 K8SaaS 目前没有用于生产环境 1 2VPS 和本地物理机搭建一样 但是这里网络是虚拟网络了 2 物理机 3 1 构建工具 Rancher 2
  • 面向ASIC设备的编译器框架:TVM or MLIR?

    2019 2021年 摩尔定律失效 这一关键词频频出现于各大技术网站 在此背景下 市面上多如牛毛的AI芯片公司不约而同地给出了通用CPU 专用ASIC芯片的方案 以应对日益增长的AI边 端侧推理计算需求 在AI DSA芯片的开发实践中 棘手
  • jar包打成docker镜像文件推送至服务器,服务器拉取并重启容器

    windows电脑需要去docker官网下载Docker Desktop 这里需要注意两点 windows电脑需要开启hyper v 控制面板 所有控制面板项 程序和功能 启用或关闭Windows功能 勾选上 然后等待系统重启应用 Dock
  • 关于NgRx的状态管理

    什么是NgRx 简单的讲 NgRx 是继 Redux 之后 结合 RxJs 的产物 可以说 它是 Angular 天生的 伴侣 帮助 Angular 做状态管理 NgRx 主要有三种模式 分别为 NgRx Store NgRx Effect
  • Android VLC播放器二次开发1——程序结构分析

    最近因为一个新项目需要一个多媒体播放器 所以需要做个视频 音频 图片方面的播放器 也查阅了不少这方面的资料 如果要从头做一个播放器工作量太大了 而且难度也很大 所以最后选择了VLC作为基础 进行二次开发 选择VLC的原因有两个 第一 VLC
  • 文件夹权限禁用和解除禁用

    1 文件夹权限禁用 右键文件夹 属性 安全 选择对应的用户 编辑 拒绝一栏打钩 确定 然后你会发现 文件夹对应的权限没有了 无法打开文件夹 无法重命名等 1 文件夹权限解除禁用 文件夹右键 属性 安全 高级 继续 删除禁用的用户
  • Altium Designer(AD)软件使用记录08-PCB布局部分

    目录 Altium Designer AD 软件使用记录08 PCB布局部分 一 交互是模块化抓取的设置 二 模块化及PCB 的预布局分析 三 核心最小系统 DSP SDRAM FLASH 及拓扑结构分析 四 基于CPLD 的模块布局 五
  • Day2 R (Rstudio) 的更新,R 中包的安装与更新

    1 R Rstudio 的更新与安装 R 的安装请参考官网 R的更新 Windows install packages installr require installr updateR Mac 安装devtools包 如果已经安装 跳过此
  • H5页面不同屏幕适配:纯CSS方案

    背景 UI给出的设计稿 一般是以iphone6屏幕大小为准 也就是宽高为375 667 激进一些的还会使用414 736的设计稿 在其他不同尺寸的屏幕上适配的问题也就由此诞生 一般新搭建的项目都要处理这个问题 常见方案 目前市面上比较常见的
  • Vue AES+MD5加密 后台解密

    前端VUE vue项目中安装crypto js npm install crypto js save dev CryptoJS crypto js 为 JavaScript 提供了各种各样的加密算法 目前已支持的算法包括 MD5 SHA 1
  • python打开网页被禁止_Python爬虫被禁?看看是不是这几个问题

    Python爬虫在网上完成网站的信息采集时 常常出现无缘无故的ip被禁的情况 正爬取呢就没法继续了 造成日常业务也没办法正常进行了 整个人都不好了呢 一部分人完全不清楚被禁的原因 这么简单的就给禁掉了 究竟是哪个地方不对呢 首先 和大家介绍
  • VS2013 curl源码编译(二)之zlib 1.2.11编译

    已编译好的资源 https download csdn net download key xiaodj 10825531 转载处 https blog csdn net jaggerjack330 article details 82721
  • Python Basics 笔记

    9 14 问题 gt gt gt s Python is Fun gt gt gt s 1 5 从1到第四 ytho gt gt gt s 5 从0到第四 Pytho gt gt gt s 1 从1到最后 ython is Fun gt g
  • 《计算机视觉中的多视图几何》笔记(0)

    为什么要做这个专栏 计算机视觉的一大研究目标是使计算机具有通过2D图像认知3D环境信息的能力 近年来 随着SLAM SfM MVS NeRF等技术的爆火和相关产业的蓬勃发展 越来越多的人加入到三维重建的领域当中 然而 如何入门3D视觉是一件
  • Java中关于char类型的变量为什么可以赋值为整型数字

    文章出处 链接 1 JAVA中 char占2字节 16位 可在存放汉字 2 char赋值 char a a 任意单个字符 加单引号 char a 中 任意单个中文字 加单引号 char a 111 整数 0 65535 十进制 八进制 十六
  • 5. Linux-riscv内存管理21-24问

    文章目录 2 5 在中断上下文中能不能调用包含GFP KERNEL分配掩码的内存分配函数 2 5 1 zone水位 2 5 2 GFP ATOMIC 2 5 3 在使用GPF KERNEL情况下 什么时候才睡眠 2 5 在中断上下文中能不能
  • 教你如何用两个栈实现一个队列

    一 实现思路 1 首先准备两个栈 栈A与栈B 2 栈A专门用来完成入队列操作 栈B专门用来出队列与取队首元素操作 3 每次入队列操作时 首先得判断B栈是否为空 不空则将B栈元素全都依次入A栈 最后继续入新元素 即将要入栈元素添加到栈A 4