想要利用两个栈实现一个队列, 首先我们需要搞清楚栈和队列的特性, 栈是后进先出, 是一个压栈的过程, 而队列则是先进先出的一个过程.

用两个栈去实现一个队列, 该怎样做, 首先假如我们有一组数据 7 5 9 2,
然后我们需要一个栈

stack<int> m_s1;

将这组数据压入栈中, 如下图所示


既然是用栈去实现队列, 那也就是说, 我们需要利用栈去实现一个头删的功能, 并且我们可以取到队列头的数据.
这个时候我们就要用到第二个栈了

stack<int> m_s2;

在第一个栈中循环取栈顶压入第二个栈中并删除, 直至第一个栈中只剩下一个数据. 如下图


然后将最后一个数据删除, 这时第一个栈为空, 这个时候我们其实已经完成了头删的一部分, 一定要注意, 我们不能破坏原来的队列数据(利用栈实现的队列), 所以接下来我们要做的是, 再将第二个栈中的数据不断取栈顶压入栈一中.如图:


此时我们就实现了对数据进行头删的过程, 即用两个栈模拟实现了队列的头删.

接下来想要取到队列头的数据(也就是此时栈底的数据)类似于上面的过程, 只是我们需要一个临时变量来保存这个栈底的数据, 再将栈二的数据压回栈一

#include <iostream>
#include <stack>using namespace std;//两个栈实现一个队列class stackQueue
{stack<int> m_s1;stack<int> m_s2;
public:stackQueue(){}void push(int i){m_s1.push(i);}void pop(){while (m_s1.size() > 1){m_s2.push(m_s1.top());m_s1.pop();}m_s1.pop();while (!m_s2.empty()){m_s1.push(m_s2.top());m_s2.pop();}}int front(){while (m_s1.size() > 1){m_s2.push(m_s1.top());m_s1.pop();}int tmp = m_s1.top();while (!m_s2.empty()){m_s1.push(m_s2.top());m_s2.pop();}return tmp;}int back(){return m_s1.top();}};int main()
{stackQueue sq;sq.push(2);sq.push(3);sq.push(4);cout << sq.front() << endl;sq.pop();cout << sq.front() << endl;sq.pop();cout << sq.front() << endl;system("pause");return 0;
}

C++中用两个栈实现一个队列相关推荐

  1. 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...

    多态 /*1. 要想实现覆盖(重写)父类必须声明为virtual,子类可以不声明为virtual.-->FunB()2. 派生类重写基类的虚函数实现多态,要求函数名.参数列表.返回值完全相同.( ...

  2. 【剑指offer】用两个栈实现一个队列

    题目:两个栈实现一个队列. 栈的特点:先进后出,队列的特点是先进先出 思路:stack1放入数据:pop时,先判断stack2是否为空,如果不为空,直接pop,如果空,则push(stack1.pop ...

  3. 剑指offer五:两个栈实现一个队列

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

  4. 两个栈实现一个队列,两个队列实现一个栈

    题目:用两个栈实现一个队列,用两个队列实现一个栈. 首先要了解栈和队列这两种数据结构各自的特点,栈是一种后入先出(Last In First Out,LIFO)的数据结构,队列是一种先进先出(Firs ...

  5. python 用两个栈实现一个队列

    | 两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素 ...

  6. java实现-两个栈实现一个队列和两个队列实现一个栈

    1.两个栈实现一个队列 思路:压入元素直接入stack1,删除元素先判断stack2中是否为空,如果不为空直接弹出:为空则将stack1中的元素取出压入 stack2中再弹出. 代码: import ...

  7. python ——两个队列实现一个栈两个栈实现一个队列

    1.两个队列实现一个栈 进栈:元素入队列A 出栈:判断如果队列A只有一个元素,则直接出队.否则,把队A中的元素出队并入队B,直到队A中只有一个元素,再直接出队.为了下一次继续操作,互换队A和队B. p ...

  8. 两个栈实现一个队列与两个队列实现一个栈

    http://blog.csdn.net/z84616995z/article/details/19204529 两个栈实现一个队列: 原理方法:用一个栈为主栈,一个栈为辅助栈存放临时元素. 入队:将 ...

  9. 【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)

    http://blog.csdn.net/hanjing_1995/article/details/51539578 使用两个栈实现一个队列 思路一: 我们设定s1是入栈的,s2是出栈的. 入队列,直 ...

  10. 两个栈实现一个队列/两个队列实现一个栈

    http://blog.csdn.net/sinat_30472685/article/details/70157227 1两个栈实现一个队列 1.原理分析: 队列的主要操作有两个:入队操作和出队操作 ...

最新文章

  1. linux系统定时检查网络状态python脚本
  2. QTP的那些事--web测试脚本不能录制的解决方法(个人整理未完待续)
  3. BZOJ 1013: [JSOI2008]球形空间产生器sphere 高斯消元
  4. Mac启动时:boot task failed:fsck-safe处理办法
  5. 计算机一级单元格公式设置错误是什么原因,excel表格公式出错怎么解决,电子表格求和出错...
  6. LeetCode-20:有效的括号
  7. Javashop 7.0 增加小程序支付(二次开发)
  8. 简约毕业论文答辩PPT模板
  9. 《麻省理工学院公开课:人工智能》笔记二
  10. 功能强大的截图软件——Snipaste
  11. Android安装包APK如何解压
  12. 2017 开源中国新增开源项目排行榜 TOP 100
  13. 过勇 清华计算机系,16位清华学霸的简历—比你牛的人还比你努力,膝盖已跪碎...
  14. 04 - Linux的用户与组文件
  15. 自动气象站解决方案 案例分享
  16. 音频转换器怎么将ogg转换mp3格式
  17. 汤森路透 Thomson Reuters --使用多模型数据库ArangoDB 打造快速安全的简单视图分析...
  18. 对检测出来的结果单独进行softnms操作
  19. 木筏求生1.0.0游戏
  20. java 适配器模式示例

热门文章

  1. h5实现文件下载,兼容ios、android
  2. 用ajax来上传图片,AJAX上传图片,使用ajaxupload
  3. 计算机流程图代表判断的是什么意思,算法流程图符号含义有哪些?用奇偶数判断算法流程图理解...
  4. 人机大战简史(第二版)
  5. 给小米手机安装google框架
  6. 电脑接收,怎么在电脑上发传真 在电脑上接收传真方法介绍【详细步骤】
  7. hp/博科光纤交换机配置小记
  8. redis实现CAS
  9. FL Studio20.9.1新版新功能介绍详解
  10. java启动tomcat9闪退