栈的特性是先进后出,队列的特性是先进先处。使用的两个栈,两次先进后出(数据存入栈A,栈A数据存入栈B)=先进先出。
public class StackQueue {
//数据的入口
private Stack<Integer> stackA = new Stack<>();
//数据的出口,在stackB为空的前提下,将stackA数据导入
private Stack<Integer> stackB = new Stack<>();
public static void main(String[] args) {
StackQueue stackQueue = new StackQueue();
stackQueue.enQueue(2);
stackQueue.enQueue(1);
stackQueue.enQueue(3);
System.out.println(stackQueue.deQueue());
System.out.println(stackQueue.deQueue());
System.out.println(stackQueue.deQueue());
}
//入队
public void enQueue(Integer num) {
stackA.push(num);
}
//出队
public Integer deQueue() {
transferData();
if (!stackB.empty()) {
return stackB.pop();
}
return null;
}
//在stackB为空的前提下,将stackA数据导入到stackB中
private void transferData() {
if (!stackB.empty()) {
return;
}
while (!stackA.empty()) {
stackB.push(stackA.pop());
}
}
}