思想引导:栈是先进后出的结构,而队列是一个先进先出的结构 如果想要用栈实现队列,即让栈每次出数据时候得到栈的第一个存入的数据
我们可以创建两个栈,一个push栈,一个pop栈,当我们存数据时候把数据放再push栈,当我们要取数据时候把push栈中的数据依次取出存入pop栈这时候数据就颠倒了,我们再取的时候就取到了原来栈底的元素
这其中我们在取数据要有一个倒数据的过程,这要遵守两个规则
1.倒数据一次要把全部数据都倒完
2.如果pop栈中有数据不需要倒数据
package com.day1.practice;
import java.util.Stack;
public class TwoStackToQueue {
private Stack<Integer> push;
private Stack<Integer> pop;
public TwoStackToQueue(){
push=new Stack<>();
pop=new Stack<>();
}
public void pushNum(int num){
push.push(num);
}
public int popNum(){
popGet();
if (pop.size()==0){
throw new RuntimeException("queue is empty!");
}
return pop.pop();
}
private void popGet(){
if (pop.size()!=0){
return;
}
while (push.size()!=0){
pop.push(push.pop());
}
}
public static void main(String[] args){
TwoStackToQueue test=new TwoStackToQueue();
test.pushNum(15);
test.pushNum(23);
test.pushNum(13);
test.pushNum(55);
System.out.println(test.popNum());
System.out.println(test.popNum());
System.out.println(test.popNum());
System.out.println(test.popNum());
System.out.println(test.popNum());
}
}