利用两个栈来实现一个队列, 这个问题很常见。  最关键的是要有好的思路, 至于实现, 那是很简单的事情了。 在本文中, 也想说说自己的思路, 但是, 我觉得用代码来表述思路更符合我的习惯, 也是我的菜, 所以, 仅仅给出代码。 如有需要, 大家可以根据代码来理解思路。

OK, 没有必要废话了, 直接上代码:

#include <iostream>
#include <stack>
using namespace std;// 用两个stack实现一个queue, 以int类型为例吧
class MyQueque
{
private:stack<int> s1; // s1负责入队stack<int> s2; // s2负责出队public:// 入队void push(int x){s1.push(x);}// 出队void pop(){if(!s2.empty()){s2.pop();}else{while(!s1.empty()){int tmp = s1.top();s1.pop();s2.push(tmp);}s2.pop();}}// 取头int front(){if(!s2.empty()){return s2.top();}while(!s1.empty()){int tmp = s1.top();s1.pop();s2.push(tmp);}return s2.top();}// 取尾int back(){if(!s1.empty()){return s1.top();}while(!s2.empty()){int tmp = s2.top();s2.pop();s1.push(tmp);}return s1.top();}// 求大小int size(){return s1.size() + s2.size();}// 判断是否为空bool empty(){if(s1.empty() && s2.empty()){return true;}return false;}
};int main()
{{MyQueque que;que.push(1);que.push(2);que.push(3);que.push(4);que.push(5);while(!que.empty()){cout << que.front() << endl;que.pop();}cout << "-------------------" << endl;}{MyQueque que;que.push(1);que.push(2);que.push(3);que.push(4);que.push(5);while(!que.empty()){cout << que.size() << endl;que.pop();}cout << "-------------------" << endl;}{MyQueque que;que.push(1);que.push(2);que.push(3);que.pop();que.pop();que.push(4);que.push(5);while(!que.empty()){cout << que.front() << endl;que.pop();}cout << "-------------------" << endl;}return 0;
}

结果:

1
2
3
4
5
-------------------
5
4
3
2
1
-------------------
3
4
5
-------------------

我写完上述代码后, 简单走读了一下代码, 并测试了一下, 初步发现还OK,   如果大家发现有什么问题, 欢迎指出, 在此,先感谢一下。

两个栈来实现一个队列的C++代码(某公司社会招聘笔试题)相关推荐

  1. 两个栈来实现一个队列的C++代码

    #include <iostream> #include <stack> using namespace std;// 用两个stack实现一个queue, 以int类型为例吧 ...

  2. 化栈为队(两个栈来实现一个队列)

    实现一个MyQueue类,该类用两个栈来实现一个队列. 示例: MyQueue queue = new MyQueue();queue.push(1); queue.push(2); queue.pe ...

  3. JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作(《剑指offer》)

    最近在刷<剑指offer>里的编程题,但是网上关于<剑指offer>的解答多半是C或者C++的,而且官方(作者)也是在用C++进行讲解,这里自己用java写了一些题目的解答代码 ...

  4. 《剑指offer》c++版本 9. 用两个栈来实现一个队列

    如题: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 本题考察对数据结构队列,栈的理解.队列的特点是FIFO,先进先出.栈的特点是FILO,先进后出.题目要求我 ...

  5. N5-用两个栈来实现一个队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. import java.util.Stack; /*** 用两个栈来实现一个队列,完成队列的Push和P ...

  6. 牛客网(剑指offer) 第五题 用两个栈来实现一个队列

    //用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. //方法一:没有用到栈 $queue=array(); function mypush($node) {glo ...

  7. 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。...

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. import java.util.Stack; public class Solution {      ...

  8. 算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。...

    算法:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.<剑指offer> 利用栈来进行操作,代码注释写的比较清楚:首先判断两个栈是否是空的:其次当栈二 ...

  9. 剑指offer两个栈来实现一个队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路 一个水题,不过有一个坑:我们假设stack1是输入用的,stack2是输出用的,必须是stack2 ...

最新文章

  1. R语言pacman包管理R编程语言需要的包实战:使用p_load函数安装和加载多个R包、使用p_unload函数卸载多个R包、使用p_update函数更新过期的R包
  2. C#进阶系列——DDD领域驱动设计初探(五):AutoMapper使用
  3. python可以写桌面软件吗-用Python编写一个桌面软件系统的步骤是什么?
  4. 十一、Struts2封装请求参数的方式
  5. 那些离开工业界,回归学术界的AI科学家们!
  6. python代码该怎么简化_Python开发简化代码的六大技巧
  7. Flutter SwitchListTile 开关组件使用详情
  8. 71万买玛莎拉蒂,手续竟然全是假的:71万或打水漂
  9. php与ununtu通信,Ubuntu 20.04 LTS 已引入 PHP 7.4
  10. 廖雪峰python教程官网-廖雪峰老师官方爬虫教程,13个案例带你全面入门
  11. Cobalt Strike 和 MSF 免杀上线
  12. m2增长率曲线_中国通胀率(中国m2历年数据曲线图)
  13. springboot毕设项目流浪动物救助和领养平台e1yqy(java+VUE+Mybatis+Maven+Mysql)
  14. AI-语音处理理论和应用-语音识别、语音合成
  15. 游戏出海行业现状概况
  16. Cesium资料大集合
  17. WinUSB - 微软为所有 USB 设备提供的常规驱动程序
  18. iOS 让 APP 在后台长时间运行
  19. 3DS MAX 学习笔记 一(对齐工具)
  20. get_article_info

热门文章

  1. 日期横线转为斜线oracle,excel 函数 日期横线格式自动变成斜线 | excle日期显示横线...
  2. 超微服务器性能,读取性能强劲 超微2U机架F228服务器评测
  3. Ai-WB1系列驱动4.0寸电阻触摸屏运行LVGL v8.3
  4. 使用 pandoc 进行文档转换(markdown转word)
  5. 【NOIP2018提高组D2T2】填数游戏
  6. 乔布斯逝去十年 苹果坠入凡间?
  7. 教您如何远离电脑病?
  8. Android 长图大图加载
  9. 主页被改为www.n220.com www.129yy.cn
  10. 【保姆级!完整详细!】小米路由器3 刷openwrt固件并连接上校园网