Java用两个堆实现队列先进先出--转载

思路:入队列时用堆1压入所有元素,出队列时先把堆1的元素逐个取出放到堆2里,再从堆2里逐个弹出元素即可实现队列的先进先出.
入队列 0 1 2 3 4, 堆1:4 3 2 1 0, 堆2:0 1 2 3 4, 出队列: 0 1 2 3 4

复制代码
import java.util.*;
public class QueueWithTwoStack {
  private Stack inbox=new Stack();
  private Stack outbox=new Stack();

  public void enqueue(int item){
    inbox.push(item);
  }

  public int dequeue(){
    //如果outbox是空的,while循环,把所有的inbox里的元素全部push到outbox:0 1 2 3 4
    if(outbox.isEmpty()){
      while(!inbox.isEmpty()){
        outbox.push(inbox.pop());
      }
    }
    // 一次for循环,从outbox里取出一个元素
    return (int)outbox.pop();
  }

  public static void main(String args[]){
    QueueWithTwoStack test=new QueueWithTwoStack();
    // push inbox: 4 3 2 1 0
    for (int i=0;i<5;i++){
      test.enqueue(i);
    }
    // pop
    for (int i=0;i<5;i++){
      int j= test.dequeue();
      System.out.println(j);
    }
  } /**output: 0 1 2 3 4 */
}
复制代码
复制代码
➜  /tmp javac QueueWithTwoStack.java
Note: QueueWithTwoStack.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
➜  /tmp java QueueWithTwoStack      
0
1
2
3
4
复制代码

原文:https://blog.csdn.net/shendezhuti/article/details/78326489

参考java堆:https://www.runoob.com/java/java-stack-class.html

posted @   船长博客  阅读(758)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
永远相信美好的事情即将发生!
点击右上角即可分享
微信分享提示