分析:
1、队列是先进先出的,栈是后进先出的。
2、想要用栈实现队列,必须是两个栈。一个栈(A)入队列,一个栈(B)出队列。
3、入栈就相当于是入队列了。
4、关键在于出队列的时候,我们需要用另一个栈B来把栈A的元素颠倒一下,再在栈B中出队列。
public class StackImplQueue{
private Stack<Integer> stackA = new Stack<>();
private Stack<Integer> stackB = new Stack<>();
//入队:复杂度O(1)
public void enQueue(int element){
stackA.push(element);
}
public Integer deQueue(){
if (stackB.isEmpty()){
if (stackA.isEmpty()){
return null;
}
transfer();
}
return stackB.pop();
}
//栈A元素移到栈B
private void transfer(){
while (!stackA.isEmpty()){
stackB.push(stackA.pop());
}
}
public static void main(String[] args) {
StackImplQueue stackImplQueue = new StackImplQueue();
stackImplQueue.enQueue(1);
stackImplQueue.enQueue(2);
stackImplQueue.enQueue(3);
System.out.println(stackImplQueue.deQueue());
System.out.println(stackImplQueue.deQueue());
stackImplQueue.enQueue(4);
System.out.println(stackImplQueue.deQueue());
System.out.println(stackImplQueue.deQueue());
}
}