用队列实现栈

实现原理:假设queue,help两个队列。
push操作时,将数据压入queue队列。
pop操作时 将queue队列的数据只保留最后一个,其余压入help队列。然后将最后一个弹出。
这样就保证了栈的后进先出,之后交换两个队列,有数据的一直存放在queue中。
public class QueueToStack {
private Queue<Integer> queue;
private Queue<Integer> help;
public QueueToStack(){
queue = new LinkedList<>();
help = new LinkedList<>();
}
public void push(int number){
queue.add(number);
}
public Integer pop(){
if(queue.isEmpty()){
throw new RuntimeException("the stack is empty");
}
while (queue.size()!=1){
this.help.add(queue.poll());
}
int data = queue.poll();
swap();
return data;
}
public Integer peek(){
if(queue.isEmpty()){
return null;
}
while (queue.size()!=1){
this.help.add(queue.poll());
}
int data = queue.poll();
help.add(data);
swap();
return data;
}
public void swap(){
Queue<Integer> temp = queue;
queue = help;
help = temp;
}
}
总结:用两个队列实现栈,本质上就是把先进先出变成先进后出,所以每次弹出最后一个进入队列的元素即可。

猜你喜欢

转载自www.cnblogs.com/liuwentao/p/9388161.html