实现原理:
栈是先进后出,队列是先进先出。两个栈,一个先进后出的数据先放到另一个栈,再弹出就符合先进先出。
public class stacktoque {
public static void main(String args[]){
int[] arr=new int[]{1,3,2,4,6,7};
Que q=new Que(arr);
q.put();
q.put();
q.put();
q.put();
System.out.println(q.get());
System.out.println(q.get());
}
static class Que{
Stack s1;
Stack s2;
int[] arr;
int i=0;
public Que(int[] arr) {
super();
s1 = new Stack();
s2 = new Stack();
this.arr = arr;
}
public void put(){
s1.push(arr[i++]);
}
public int get(){
/*
* 这个地方是核心,出队列的时候,需要把s1的数据放到上s2上。才能保证先进先出。
* 但是为了避免s1多次出栈覆盖掉s2栈顶,因此,必须等到s2弹完才可以再次加入
*/
while(!s1.isEmpty()&&s2.isEmpty()){
s2.push(s1.pop());
}
return (int) s2.pop();
}
}
}