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

如何用两个栈实现一个队列如何实现使用两个栈实现一个队列呢 这里主要还是自己的思想问题 在这里我们首先整理一下自己的思维 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • js匿名函数传参_java 匿名函数

    js匿名函数传参_java 匿名函数varinitSample=(function(){ varwysiwygareaAvailable=isWysiwygareaAvailable(), isBBCodeBuiltIn=!!CKEDITOR.plugins.get(‘bbcode’); returnfunction(paramId){ vareditorElement=CKEDITO

    2022年10月3日
    6
  • jsp添加背景图片铺满屏幕_web背景图片铺满

    jsp添加背景图片铺满屏幕_web背景图片铺满<bodystyle=”background:url(图片存放的路径);background-size:100%100%;background-attachment:fixed”></body>

    2022年9月1日
    5
  • sublime text3 替换(sublime替换成换行符)

    我遇到一个文章,需要把所有的(数字)换为[数字]于是我使用SublimeText的替换首先,我们需要打开正则使用“Alt+R”或打开“Ctrl+h”选择正则。然后我们开始输入正则,“((\d+)”我们需要拿出的是数字,所有在数字加“()”。于是在替换写“[1\]”,其中1\]”,其中0就是所有的,$1就是第一个括号。如何使用正则可以去看正则表达入门。Suml

    2022年4月10日
    558
  • kafka add partitions function「建议收藏」

    kafka add partitions function「建议收藏」代码功能在java代码中调用scala接口addPartitions.使用场景在kafka中如果需要定制kafka-topic的管理,那么其中一个功能很可能会用到:增加partition数量。但是在kafka-1.0.x之上的版本的AdminUtils中预留了相关的apiaddPartitions,具体功能的实现可以参考下面源码(scala):/***Addparti…

    2022年6月26日
    27
  • 我是全网最硬核的高并发编程作者,CSDN最值得关注的博主,大家同意吗?(建议收藏)「建议收藏」

    我是全网最硬核的高并发编程作者,CSDN最值得关注的博主,大家同意吗?(建议收藏)「建议收藏」我是全网最硬核的高并发编程作者,CSDN最值得关注博主,全网最硬核的基于可视化的多数据源数据异构中间件作者,也许现在就是,也是不久的将来就是,大家同意吗?

    2022年5月31日
    33
  • c++ CreateThread

    c++ CreateThread1.基本使用方式1.1DWORDWINAPI函数名(LPVOIDlpParam);//标准格式DWORDWINAPI函数名(LPVOIDlpParam){return0;}CreateThread(NULL,0,函数名,0,0,0);1.2使用void函数名()此种线程声明方式时,lpStartAddress需要加入LPTHREAD_START_ROUTINE转换void函数名(){return;}CreateThre

    2022年7月21日
    14

发表回复

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

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