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

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

题干:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

分析:队列为先入先出型,栈为先入后出型。若使用两个栈,则某一元素先入后出(第一个栈),再转移到另一个栈。此时,栈顶元素即为第一个进第一个栈的元素。

在这里插入图片描述
代码:

class CQueue {

public:

  CQueue() {



  }



  void appendTail(int value) {

​    s1.push(value);

  }



  int deleteHead() {

​    int output;



​    if (s2.empty())  // 此操作非常重要。假设插入插入删除 插入插入删除(删除时应该先将第一次插入的删除完,再进行元素填充)

​    {

​      while (!s1.empty())

​      {

​        s2.push(s1.top());

​        s1.pop();

​      }

​    }



​    if (s2.empty())

​      output = -1;

​    else

​    {

​      output = s2.top();

​      s2.pop();

​    }

​      return output;



  }

private:

  stack<int> s1,s2;

};

注意:1、删除操作中,if (s2.empty())不可缺。。(只有当12345全部delete之后,才可往s2中加元素,不然,5可能最后才回pop)

​ 2、 while (!s1.empty()),重复循环直到将s1清空。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值