本文章将实现队列模拟栈:
import java.util.LinkedList;
import java.util.Queue;
public class Study01 {
public static void main(String[] args) {
}
}
class MyStack<E> {
// 定义两个队列
Queue<E> queue1;
Queue<E> queue2;
public MyStack() {
queue1 = new LinkedList<E>();
queue2 = new LinkedList<E>();
}
// 入栈
public void push(E x) {
// 将入栈添加至队列2
queue2.offer(x);
// 将队列1中的所有元素转存至队列2
while (!queue1.isEmpty()) {
queue2.offer(queue1.poll());
}
// 交换队列1和队列2
Queue<E> temp = queue1;
queue1 = queue2;
queue2 = temp;
}
// 出栈
public E pop() {
return queue1.poll();
}
public E top() {
return queue1.peek();
}
public boolean isempty() {
return queue1.isEmpty();
}
}
使用两个队列模拟栈,为了满足栈的特性,即最后入栈的元素最先出栈,所以应当满足队列的前端的元素是最后入栈的元素。所以使用两个队列,queue1作为储存栈内的元素,queue2作为入栈操作的辅助队列。
入栈操作时,先将首元素入队到queue2,然后将queue1的全部元素依次出队并入队到queue2,此时queue2的队头元素为最新的入栈元素,再将queue2与queue1互换,queue1的元素即为栈内元素,对头和队尾分别对应栈底。
测试效果如图: