栈具有“后进先出”的特点,即某个元素最后进入栈,却最先出栈;队列具有“先进先出”的特点,即元素从队尾依次进队列,依次从队头出队列;现在用两个队列模拟实现一个栈的过程,详细过程请看下面这张本人制作的gif图:

实现代码:

#include <iostream>
using namespace std;
#include <queue>template <typename T>
class Stack {
public:void Push(T elem);//向模拟栈中添加元素void Pop();//向模拟栈中删除元素T Top();//返回最后进入的头元素bool Empty();//判断栈是否为空int Size() const;//返回栈中元素个数
private:queue<T> q1;queue<T> q2;
};template <typename T>
bool Stack<T>::Empty()  //判断模拟的栈是否为空
{if (q1.empty() && q2.empty()){return true;}return false;
}template <typename T>
int Stack<T>::Size() const //返回模拟栈中元素的个数
{if (!q1.empty()){return q1.size();}else{return q2.size();}
}template <typename T>
T Stack<T>::Top()//返回最后进入的头元素
{if (Empty()){throw;}else if (!q1.empty()){return q1.back();}else{return q2.back();}
}template <typename T>
void Stack<T>::Push(T elem) //向栈中添加元素
{if (q1.empty() && q2.empty()){q1.push(elem);}else if (!q1.empty()){q1.push(elem);}//q2不为空else//两个队列不可能同时为空,因为在之前删除元素操作时,有一个必为空队列{q2.push(elem);}
}template <typename T>
void Stack<T>::Pop() //向栈中删除头元素
{if (Empty())//两个队列都为空,无法删除{throw;}if (!q1.empty()){while (q1.size()>1){q2.push(q1.front());q1.pop();}q1.pop();}//q2不为空else //if (!q2.empty() && q1.empty()){while (q2.size()>1){q1.push(q2.front());q2.pop();}q2.pop();}
}int main()
{Stack<int> s;int i = 0;for (i = 1; i <= 5; i++){s.Push(i);}cout << "出栈的顺序为:" << endl;while (!s.Empty()){cout << s.Top() << endl;s.Pop();}system("pause");return 0;
}

运行结果:

出栈的顺序为:

5

4

3

2

1

请按任意键继续. . .

本文出自 “岩枭” 博客,请务必保留此出处http://yaoyaolx.blog.51cto.com/10732111/1784121

用两个队列模拟实现一个栈的过程相关推荐

  1. 【两个队列模拟栈】——栈与队列

    题目 用两个队列模拟实现栈的操作原题链接 思路 我是用两个list模拟的,没有用java的queue,下次用queue. 思想就是:元素进入一个list1,当list1中元素多余1个时,将list1的 ...

  2. 【HDU 1276】士兵队列训练问题(两个队列模拟)

    题目链接 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1276 解题思路 两个队列模拟即可,注意: 必须每一轮都点完,而不是数到只剩三人了就停止. 如 ...

  3. 用队列模拟患者医院看病的过程

    1.用队列模拟患者医院看病的过程 部分函数请参考:https://blog.csdn.net/qq_50504109/article/details/120384457 /*** 模拟患者医院看病的过 ...

  4. 用队列实现栈--用两个队列模拟实现栈

    出栈:哪个队列不为空,将该队列中前n-1个元素挪到另一个空队列中,然后将该队列中仅剩的元素出队列. 入栈:哪个队列不为空,将元素放到哪个队列中即可. 获取栈顶元素:哪个队列不为空,该队列的队尾就是栈顶 ...

  5. 栈与队列4——用一个栈实现另一个栈的排序

    题目 一个栈A的元素类型为整形,仅使用一个栈B,来实现栈A从栈顶到栈底元素是从大到小的顺序. 思路 原来的栈为stack,申请的栈为help,当前stack的栈顶元素记为cur 如果cur小于help ...

  6. 栈和队列之用一个栈实现另一个栈的排序

    用一个栈实现另一个栈的排序 题目: 一个栈元素的类型为整数,现在要想将该栈从顶到底按从大到小的顺序排列,只允许申请一个栈,除此之外, 可以申请一个变量,可以申请额外的变量,但是不能申请额外的数据结构, ...

  7. C/C++面试题—使用STL两个队列实现一个栈

    题目介绍 使用STL中的两个队列实现一个栈,实现栈的top.pop.push.clear等操作. 思路分析 思路和使用2个栈实现一个队列是相通的,用一个队列queue1容器用来 压栈,出栈的时候判断q ...

  8. java 栈和队列实现迷宫代码_使用两个队列实现一个栈

    两个队列实现一个栈 栈的特点是后进先出,队列的特点是先进先出.使用两个队列模拟栈,实现栈的push,pop,top,empty 操作. 假设队列中均为数字,其中队列q1为操作队列,q2为辅助队列. p ...

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

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

最新文章

  1. 塔利亚菲科 ajax,[欧冠小组赛第4轮]阿贾克斯 3-1 中日德兰
  2. Exchange禁用中继后仍然被中继的处理方法
  3. 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章
  4. swift operation
  5. 一个机械系毕业生的感言
  6. reids 源码 zipmap.c 压缩map的实现
  7. checkbox大小缩放
  8. 单机实验mysql的主从备份(master slaver)
  9. django初体验 学习笔记
  10. python分号_在Python中拆分分号分隔的字符串
  11. 腾讯北大合作的稀疏大模型训练加速方案HET入选国际顶会VLDB
  12. html5 侧滑菜单,侧滑菜单
  13. JavaScript中事件的绑定与解绑
  14. C#版 - 小红书后台开发面试题: 二维数组中的查找
  15. 2020大学生网络安全知识总决赛模拟题错题集(9)
  16. [matlab] 7.快速搜索随机树(RRT---Rapidly-exploring Random Trees) 路径规划
  17. 2019第四届新媒体千人峰会广州站将于6月正式开幕!
  18. easypermission坑_Android EasyPermissions官方库高效处理权限相关教程
  19. rxbus 源码_RxBus---使用RxAndroid2.0实现RxBus
  20. python操作pdf做文档的分割、合并,内容提取

热门文章

  1. 助力莘莘学子丨上海交通大学3D打印科研实践在云铸三维圆满谢幕
  2. 基于PCA的人脸识别的Matlab实现代码
  3. 年人均输液八瓶 这种解读不科学
  4. 日地拉格朗日L2点轨道的卫星运行
  5. java 动态日历的实现
  6. PMP分享|​PMP学习——项目管理的提升
  7. 关于CAN通信速率在某些频段下不通的解决办法
  8. 题目 - 小茗同学很方
  9. 双碳目标路径/方案研究,气体排放核算方法(一)
  10. Arcface人脸识别算法流程分析