题目描述:
用两个栈来实现一个队列,完成队列的Push和Pop操作。
队列中的元素为String类型。
package jzoffer;
import java.util.Stack;
public class QueueWithTwoStacks {
private Stack<String> stack1 = new Stack<String>();//创建第一个栈stack1
private Stack<String> stack2 = new Stack<String>();//创建第二个栈stack2
public void appendTail(String s){
stack1.push(s);//将你想要加入栈的字符串压入stack1
}
public String deletedHead() throws Exception{//一般要删除的话我们需要把stack1压入stack2,再将stack2中的元素pop出一个就好了
if(stack2.isEmpty()){//先要判断stack2是否为null,然后将栈1里面的压入栈2
while(!stack1.isEmpty()){ //如果栈2不为null 依次将1里面的弹出然后压入栈2
stack2.push(stack1.pop());
}
}
if(stack2.isEmpty()){//那么如果1里面的本身也是空的,上面的while循环导致2里面的也为null,所以这里也要判断一下
System.out.println("队列为null,不能删除!!!");
throw new Exception("为null,不能删除!");
}
return stack2.pop();//然后在2里面弹出一个就好了
}
public static void main(String[] args) throws Exception {
QueueWithTwoStacks qwts = new QueueWithTwoStacks();
qwts.appendTail("a");
qwts.appendTail("b");
System.out.println("先压入a,再压入b,然后弹出应该是b,a,符合栈的先进后出原则--");
while(!qwts.stack1.isEmpty()){
System.out.print(qwts.stack1.pop() + " ");
}
qwts.appendTail("a");
qwts.appendTail("b");
System.out.println("");
System.out.println("弹出栈2一个元素a,再输出栈2,再剩b了:");
System.out.println(qwts.deletedHead());
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/843cc78b15c13faeb8449ff1c89beb63.png)