使用两个栈实现队列

来源:互联网 发布:spss如何快速录入数据 编辑:程序博客网 时间:2024/05/05 23:06

需求:用两个栈实现一个队列。队列的声明如下,实现它的两个函数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();    }}