剑指 Offer 09. 用两个栈实现队列

剑指 Offer 09. 用两个栈实现队列

  • 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除
  • 思路:由于栈有先进后出的特征,所以若要实现队列的先进先出需要利用一个保存新元素的栈和一个准备输出旧元素的栈,旧元素的栈由前一个栈出栈得到。其中,删除元素时需要从保存旧元素的栈中取元素,取完后再从保存新元素的栈中填充。
    //由于栈有先进后出的特征,所以若要实现先进先出需要实现进(add栈)、出(add栈)、进(del栈)、出(del栈)
    //del栈负责删除元素,若del栈为空,需要查看add栈是否为空,将其元素出栈填充到del栈,实现以前的先进变成栈顶元素,实现先出
    Stack<Integer> add = new Stack<>();//负责添加appendTail进来的元素和del栈为空仍需删除元素时出栈
    Stack<Integer> del = new Stack<>();//负责实现deleteHead删除元素功能

    public CQueue() {

    }

    public void appendTail(int value) {//实现入队功能
        add.push(value);//add栈负责添加元素
    }

    public int deleteHead() {//实现出队功能
        if (!del.isEmpty()) {//判断del栈是否为空,不为空,直接删除栈顶元素(以前add栈栈底元素)
            return del.pop();
        } else {
            while (!add.isEmpty()) {//del栈填充能量
                del.add(add.pop());
            }
            return del.isEmpty() ? -1 : del.pop();//三元选择符,若del最后为空,代表add栈也为空,返回-1
        }
    }

/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue obj = new CQueue();
 * obj.appendTail(value);
 * int param_2 = obj.deleteHead();
 */
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值