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 @ 2021-01-22 21:01  船长博客  阅读(746)  评论(0编辑  收藏  举报
永远相信美好的事情即将发生!