天天看點

兩個棧實作一個隊列

隊列是先進先出,而棧是先進後出;

考慮到我們取棧頂元素的便利性,我們在實作時使得棧頂等于隊列頭;

由于往棧中添加元素相當于往隊列頭添加元素,是以我們需要在兩個隊列中進行元素的轉移,比較簡單的實作是:

1.q1和q2在任一時刻至少有一個為空,即如果有元素,是以元素隻在同一個隊列中。

2.當有元素需要插入時,将插入的元素插入到空的隊列中,并将另一非空隊列的元素轉移到該隊列中,于是插入的元素添加到了隊列頭中。

import java.util.Stack;
public class 兩個棧實作一個隊列 {

  Stack stack1 = new Stack();
  Stack stack2 = new Stack();

  public void push(int num){
    stack1.push(num);
  }

  public int pop(){
    if(stack2.empty()){
        while(!stack1.empty()){
            stack2.push(stack1.pop());
        }
    }
    return stack2.pop();
  }

}