用两个队列实现一个栈的功能
入栈:将元素进队列1
出栈:判断队列1红元素的个数是否为1,如果等于1,则出队列,否则将队列1中的元素,
以此出队列并放入队列2,直到队列1中的元素留下一个,然后队列1出队列,再把,队列2中的元素出队列以此放入队列1中。
简单点的说,就是通过队列2作为缓冲,每次取出队尾的元素。代码如下:
package test.queue;
import java.util.LinkedList;
import java.util.Queue;
//用两个队列实现一个栈的功能
//入栈:将元素进队列1
//出栈:判断队列1红元素的个数是否为1,如果等于1,则出队列,否则将队列1中的元素,
//以此出队列并放入队列2,直到队列1中的元素留下一个,然后队列1出队列,再把,队列2中的元素出队列以此放入队列1中。
public class Queue2Stack {
private Queue<Integer> q1=new LinkedList<Integer>();
private Queue<Integer> q2=new LinkedList<Integer>();
//入栈
public void push(int value) {
q1.add(value);
}
//出栈
public int pop() {
//如果没有元素
if(q1.isEmpty()) {
System.out.println("栈空");
return -1;
}
//如果只有一个元素,就直接出栈
if(q1.size()==1) {
return q1.remove();
}
//以队列2为缓冲,把队列1的元素都放在队列2中,剩下最后一个
while(q1.size()>1) {
q2.add(q1.remove());
}
int value=q1.remove();
//再把队列2的元素全部放回队列1
while(!q2.isEmpty()) {
q1.add(q2.remove());
}
return value;
}
//测试
public static void main(String[] args) {
Queue2Stack s=new Queue2Stack();
s.push(1);
s.push(2);
s.push(3);
System.out.println("出栈:"+s.pop());
System.out.println("出栈:"+s.pop());
System.out.println("出栈:"+s.pop());
}
}