package others;
import java.util.Stack;
/**
- 使用栈来实现队列的入队出队操作
- 栈只能栈顶出入元素
- 队列是队尾进元素,对头出元素
- 需要用到两个栈来实现
- @author Administrator
*/
public class StackQueue {
private Stack<Integer> AStack = new Stack<>();
private Stack<Integer> BStack = new Stack<>();
/**
* 入队时直接让元素进入A栈
* @param i
*/
public void enQueue(Integer i){
AStack.push(i);
}
/**
* 出栈时,如果B栈是空的,将A中的元素转移到B
* 此时b中的元素相当于a的倒序,就是A的栈底元素排序
*
* 如果B栈不为空,直接出B栈的栈顶元素
*
* @param i
*/
public Integer deQueue(){
if(BStack.isEmpty()){
if(AStack.isEmpty()){
return null;
}else{
tansfer();
}
}
return BStack.pop();
}
/**
* 将A中的所有元素压入B栈中
*/
private void tansfer() {
while(!AStack.isEmpty())
BStack.push(AStack.pop());
}
public static void main(String[] args) {
StackQueue sq = new StackQueue();
sq.enQueue(1);
sq.enQueue(2);
sq.enQueue(3);
System.out.println(sq.deQueue());
sq.enQueue(4);
sq.enQueue(5);
System.out.println(sq.deQueue());
System.out.println(sq.deQueue());
System.out.println(sq.deQueue());
System.out.println(sq.deQueue());
sq.enQueue(6);
System.out.println(sq.deQueue());
}
}