使用队列queue构造栈stack、使用栈stack构造队列queue

队列queue特性:先进先出(队尾进,队头出),主要方法poll(取值),push(放值)、getLength(长度)

栈stack特性:先进后出,主要方法poll(取值),push(放值)、getLength(长度)

/**
 * @Auther: zhangyh
 * @Date: 2019/1/14 09:57
 * @Description: 队列是先进先出(队尾进,队头出),栈是先进后出。
 *               定义两个队列:数据队列、辅助队列
 *               数据队列存放数据的队列
 *               辅助队列辅助功能
 *               length数据队列的size
 *               push数据直接add到数据队列
 *               poll把数据队列的前(length-1)个数据放入辅助队列,poll最后一个数据,
 *                     把辅助队列的所有数据放回数据队列。
 */
public class Stack<T> {
    private Queue<T> pQueue = new LinkedList<>();//数据队列
    private Queue<T> zQueue = new LinkedList<>();//辅助队列
    public  T poll() throws Exception {
        if(pQueue == null){
            throw new Exception("空栈");
        }
        T t = null;
        while (pQueue.size()>1){
            zQueue.add(pQueue.poll());//前length-1个数据放入辅助队列
        }
        if(pQueue.size() == 1){
            t = pQueue.poll();//取出数据队列的最好一个
            while (zQueue.size()>0){
                pQueue.add(zQueue.poll());//辅助队列的数据放入数据队列
            }
        }
        return t;
    }
    public  void push(T t){
        pQueue.add(t);
    }
    public long getSize(){
        return pQueue.size();
    }

 

 

/**
 * @Auther: zhangyh
 * @Date: 2019/1/14 13:58
 * @Description: 先进先出
 */
public class Queue<T> {

    private Stack<T> psStack = new Stack<>();//数据栈
    private Stack<T> tStack = new Stack<>();//辅助栈

    public void push(T t){
        psStack.push(t);
    }
    public T poll(){
        T t = null;
        while (psStack.size() > 1){
            tStack.push(psStack.pop());
        }
        if(psStack.size() == 1){//最好一个
             t = psStack.pop();
             while (tStack.size()>0){
                 psStack.push(tStack.pop());
             }
        }
        return t;
    }

    public long getLength(){
        return psStack.size();
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值