思路
- 通过两个栈A B,A做入队操作,B做出队操作
- 元素转移时机:如果出队时B是空的则将A元素转移至B
代码实现
/**
* @Author qucg
* @Version 2019/6/19
* @Description 使用栈实现队列
* 思路:
* 1.通过两个栈A/B,A做入队操作,B做出队操作。
* 2.元素转移时机:如果出队时B是空的则将A元素转移至B
*/
public class StackArchieveQueue {
private Stack<Integer> stackA = new Stack<Integer>();
private Stack<Integer> stackB = new Stack<Integer>();
/**
* 入队操作
*
* @param element
*/
public void enQueue(int element) {
stackA.push(element);
}
/**
* 出队操作
*
* @return 队首元素
*/
public Integer deQueue() {
if (stackB.isEmpty()) {
if (stackA.isEmpty()) {
return null;
}
// 转移元素
transfer();
}
return stackB.pop();
}
/**
* 转移元素
*/
public void transfer() {
while (!stackA.isEmpty()) {
stackB.push(stackA.pop());
}
}
public static void main(String[] args) {
StackArchieveQueue stackArchieveQueue = new StackArchieveQueue();
stackArchieveQueue.enQueue(1);
stackArchieveQueue.enQueue(2);
stackArchieveQueue.enQueue(3);
System.out.println(stackArchieveQueue.deQueue());
System.out.println(stackArchieveQueue.deQueue());
System.out.println(stackArchieveQueue.deQueue());
stackArchieveQueue.enQueue(4);
System.out.println(stackArchieveQueue.deQueue());
}
}
注意
栈A元素转移到栈B中的时机