思路:先将数据存到第一个栈里,再将第一个栈里的元素全部出栈到第二个栈,第二个栈出栈,即可达到先进先出
package ds;
import java.util.Queue;
import java.util.Stack;
import java.util.concurrent.LinkedBlockingQueue;
public class StackToQueue<E> {
Stack<E> stack1 = new Stack<E>();
Stack<E> stack2 = new Stack<E>();
public static void main(String[] args) {
Queue<Integer> queue=new LinkedBlockingQueue<Integer>();
queue.poll();
}
public void offer(E val) {
stack1.push(val);
}
public E poll() {
if (stack2.empty()) {
while (!stack1.isEmpty()){
E temp=stack1.peek();
stack2.push(temp);
stack1.pop();
}
}
E res = stack2.peek();
stack2.pop();
return res;
}
}
思路:先将数据存到第一个队列里面,然后数据出队一直出队到地二个队列里面,直到第一个队列里面剩余一个数据,这个时候出队 即可达到先进后出的特性
package ds;
import java.util.LinkedList;
import java.util.Queue;
public class QueueToStack<E> {
private Queue<E> que1 = new LinkedList<>(); // 存放栈的元素
private Queue<E> que2 = new LinkedList<>(); // 做一个辅助操作
public void push(E e) {
this.que1.offer(e);
}
public E pop() {
// 从que1出队,把最后一个出队的元素返回
E data = null;
/**
* 把que1里面的所有元素出队,放入que2里面,
* 然后把que1最后一个出队的元素直接返回,不用放入que2
*/
while (!this.que1.isEmpty()) {
data = this.que1.poll();
if(this.que1.isEmpty()){
break;
}
this.que2.offer(data);
}
// 获取该出栈的元素以后,再把que2的元素再放入que1里面
while(!this.que2.isEmpty()){
this.que1.offer(this.que2.poll());
}
return data;
}
}