使用两个栈实现队列

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


    }
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值