需求:用两个栈实现一个队列。队列的声明如下,实现它的两个函数appendTail(入队) 和deleteHead(出队)
分析:栈的特点是先进后出,而队列的特点是先进先出。在有两个栈的条件下,例如栈A和栈B,假设要实现3个元素的进队和出队操作。我们可以进行如下操作:三个元素a b c一次进入栈A,然后让c b a一次出栈,然后再让c b a一次进栈B,然后三个元素再次出栈,则输出顺序为a b c,则达到了队列先进先出的特点。
总结:当栈B不为空时,那么栈B所有元素一次进行出栈操作,如果栈B为空时,则把栈A的元素出栈,然后进入栈B
代码如下:
import java.util.Stack;
/**
*
*/
public class TwoStacksToQueue {
static class Test<T>{
public Stack<T> stackA = new Stack<T>();
public Stack<T> stackB = new Stack<T>();
//入队操作
public void appendTail(T t){
stackA.push(t);
}
//出队操作
/**
* 1.如果栈B中为空时,则一次将栈A的元素出栈后进入栈B中,然后栈B出栈
* 2.如果1中操作完成,则所有元素操作已经完成
* @param
* @return
*/
public T deleteHead(){
if(stackB.isEmpty()){
while (!stackA.isEmpty()){
stackB.push(stackA.pop());
}
}
if(stackB.isEmpty()){
System.out.println("no more element");
}
return stackB.pop();
}
}
static class T{
public T(){}
}
public static void main(String args[]){
T t1 = new T();
T t2 = new T();
T t3 = new T();
T t4 = new T();
T t5 = new T();
Test<T> test = new Test<>();
test.appendTail(t1);
test.appendTail(t2);
test.appendTail(t3);
test.appendTail(t4);
test.appendTail(t5);
test.deleteHead();
}
}