1 实现原理介绍
当需要插入元素时,总是将新元素插入到那个空的队列中,然后再将另一个有数据的队列中的数据,取出插入到存放新元素的队列中,即可完成栈的功能。**注意,每次执行完一次操作,两个队列中,只有一个队列有数据,要么是A,要么是B。**下面画图介绍具体过程:
插入元素1
此时有数据的是队列A。
插入元素2
此时有数据的是队列B。
插入元素3
此时有数据的队列A。
删除栈顶元素,pop操作
2 java代码实现
import java.util.LinkedList;
import java.util.Queue;
public class QueueToStack {
Queue<Integer> queueA = new LinkedList<>();
Queue<Integer> queueB = new LinkedList<>();
//入栈
public void push(int x){
if(queueA.isEmpty() && !queueB.isEmpty()){
queueA.add(x);
while (!queueB.isEmpty()) {
queueA.add(queueB.poll());
}
}
if(queueB.isEmpty() && !queueA.isEmpty()){
queueB.add(x);
while (!queueA.isEmpty()) {
queueB.add(queueA.poll());
}
}
if(queueA.isEmpty() && queueB.isEmpty()){
queueA.add(x);
}
}
//出栈
public int pop(){
if(!queueA.isEmpty() && queueB.isEmpty()){
return queueA.poll();
}
return queueB.poll();
}
//栈顶
public int top(){
if(!queueA.isEmpty() && queueB.isEmpty()){
return queueA.peek();
}
return queueB.peek();
}
boolean isEmpty(){
if(queueA.isEmpty() && queueB.isEmpty()){
return true;
}
return false;
}
public static void main(String[] args){
QueueToStack queueToStack = new QueueToStack();
queueToStack.push(1);
queueToStack.push(2);
queueToStack.push(3);
queueToStack.push(4);
queueToStack.push(5);
System.out.println("出栈pop: "+queueToStack.pop());
System.out.println("栈顶top: "+queueToStack.top());
System.out.println(queueToStack.isEmpty());
}
}
运行结果: