参考:https://blog.csdn.net/hellozhxy/article/details/80280393
出栈为:a 出栈为:b 出栈为:c 出栈为:d
package test;
import java.util.Stack;
/* 参考:https://blog.csdn.net/hellozhxy/article/details/80280393
*由于stack是现进后出(FILO),而queue是先进先出的(FIFO)。
*也就是说stack进行了一次反向,进行两次反向就能实现queue的功能,所以可以用两个stack实现queue。
*
* */
public class StackToQueue<T> {
Stack<T> inStack; //入栈
Stack<T> outStack;//出栈
public StackToQueue(){//构造函数
inStack=new Stack<T>();
outStack=new Stack<T>();
}
//入队列
public void enterStack(T t){
inStack.push(t);
}
//出队列
public T deleteStack(){
T result=null;
if(!outStack.isEmpty()){//不为空,直接弹出
result=outStack.pop();
}else{//出栈栈为空,则应把入栈的值添加到出栈中
while(!inStack.isEmpty()){//入栈不为空,则添加到出栈中
T tmp=inStack.pop();
outStack.push(tmp);
}
//所有入栈元素都添加到出栈中
if(!outStack.isEmpty()){
result=outStack.pop();
}
}
return result;
}
//判断队列是否为空
public boolean isEmpty(){
return inStack.isEmpty()&&outStack.isEmpty();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
StackToQueue<String> sq=new StackToQueue<String>();
sq.enterStack("a");
sq.enterStack("b");
sq.enterStack("c");
sq.enterStack("d");
while(!sq.isEmpty()){
String tmp=sq.deleteStack();
System.out.print(" 出栈为:"+tmp);
}
}
}
2545

被折叠的 条评论
为什么被折叠?



