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

如何用两个栈实现一个队列如何实现使用两个栈实现一个队列呢 这里主要还是自己的思想问题 在这里我们首先整理一下自己的思维 1 首先准备两个栈 栈 A 与栈 B2 栈 A 专门用来完成入队列操作 栈 B 专门用来出队列与取队首元素操作 3 每次入队列操作时 首先得判断 B 栈是否为空 不空则将 B 栈元素全都依次入 A 栈 最后继续入新元素 即将要入栈元素添加到栈 A 4 每次出队列与取队首元素操作时 将 A 栈中的元素依次入 B 栈 出队列即取出 B 栈中的元素 取队首元素即取 B 栈栈顶元素即可 importjava util Stack public

如何实现使用两个栈实现一个队列呢?这里主要还是自己的思想问题,在这里我们首先整理一下自己的思维:

 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.peek()); System.out.println(queue.pop()); System.out.println(queue.pop()); } }

这里的参考链接:参考自 https://blog.csdn.net/_/article/details/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232373.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SQL Server学习之路(一):建立数据库、建立表

    SQL Server学习之路(一):建立数据库、建立表0.目录1.前言2.建立数据库2.1通过SSMS建立数据库2.2通过SQL语句建立数据库3.建立表3.1通过SSMS建立表3.2通过SQL语句建立表1.前言配置是win10+SQLServer2012,使用的GUI管理工具是SQLServer2012自带的SQLServerManagementStudio(以下简称SSMS)。本系列主要学习SQLServe…

    2022年7月19日
    21
  • 基于STM32的RC522模块读写数据块以及电子钱包充值扣款系统的设计

    基于STM32的RC522模块读写数据块以及电子钱包充值扣款系统的设计前言本人也是正在学习单片机知识的萌新一枚,在这里记录下自己完成这个小设计的过程跟大家分享一下,也请大家指出我哪里还有不足可以改进的地方。秉着和大家一起学习进步发布了这篇文章STM32F103ZET6单片机我使用的单片机是正点原子版的STM32F1精英版,型号是ZET6。32系列的单片机功能比较完整,基本所有的小设计都可以使用32完成,而且现在市面上使用32系列的人也是不在少数,所以推荐大家使用这款单片机去完成各种实验和设计。…

    2022年9月18日
    2
  • 禁用LLDP

    禁用LLDP场景:在未回放pcap包的情况下,dpdk探针抓包时,会收到LLDP包(0x88cc,链路层发现协议(LinkLayerDiscoveryProtocol,LLDP)是一种数据链路层协议。)此时,我们可以修改发包服务器的配置,禁用LLDP。方法:以下方法摘抄至[此博客](http://blog.itpub.net/31520497/viewspace-2747053/)因此服务器中所有扩展网卡(X710)、板载网卡和ilo均需要关闭lldp功能,因此需要在服务器测试查找板载lldp关闭的接口

    2022年5月28日
    70
  • 【js】理解普通函数和箭头函数的区别点

    【js】理解普通函数和箭头函数的区别点普通函数在 es5 中就有了 箭头函数是 es6 中出现的函数形式 当然也可以继续用普通函数 普通函数大家知道 形式基本一致来看看箭头函数 开发时根据实际情况可以省略一些东西单条处理可以省略 return 和 大括号 单个参数可以省略 小括号 箭头函数不能作为构造函数不能 new 会报错箭头函数不绑定 arguments 但是可使用 rest 参数这是普通函数 arguments 可以使用

    2025年7月14日
    0
  • 关于.gitignore不起作用「建议收藏」

    关于.gitignore不起作用「建议收藏」由于公司和家里的as版本不同,倒腾了好久,但是代码到本地后build.gradle等文件做了修改,为了不影响公司版本,故家里的需要忽略这些文件的修改,想到的就是加gitignore配置,直接添加不起效果,找到如下办法:有时我们发现添加.gitignore文件后并没有忽略我们想要忽略的文件,解决方法就是清除一下缓存,原因gitignore对已经追踪(track)的文件无效,清除缓存后文件将以未追

    2022年10月21日
    3
  • 各种常用不等式汇总「建议收藏」

    各种常用不等式汇总「建议收藏」对数学中常用的不等式进行了汇总,目前只有结论,没有证明

    2025年11月13日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号