用两个队列模拟实现一个栈的过程
栈具有“后进先出”的特点,即某个元素最后进入栈,却最先出栈;队列具有“先进先出”的特点,即元素从队尾依次进队列,依次从队头出队列;现在用两个队列模拟实现一个栈的过程,详细过程请看下面这张本人制作的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
用两个队列模拟实现一个栈的过程相关推荐
- 【两个队列模拟栈】——栈与队列
题目 用两个队列模拟实现栈的操作原题链接 思路 我是用两个list模拟的,没有用java的queue,下次用queue. 思想就是:元素进入一个list1,当list1中元素多余1个时,将list1的 ...
- 【HDU 1276】士兵队列训练问题(两个队列模拟)
题目链接 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1276 解题思路 两个队列模拟即可,注意: 必须每一轮都点完,而不是数到只剩三人了就停止. 如 ...
- 用队列模拟患者医院看病的过程
1.用队列模拟患者医院看病的过程 部分函数请参考:https://blog.csdn.net/qq_50504109/article/details/120384457 /*** 模拟患者医院看病的过 ...
- 用队列实现栈--用两个队列模拟实现栈
出栈:哪个队列不为空,将该队列中前n-1个元素挪到另一个空队列中,然后将该队列中仅剩的元素出队列. 入栈:哪个队列不为空,将元素放到哪个队列中即可. 获取栈顶元素:哪个队列不为空,该队列的队尾就是栈顶 ...
- 栈与队列4——用一个栈实现另一个栈的排序
题目 一个栈A的元素类型为整形,仅使用一个栈B,来实现栈A从栈顶到栈底元素是从大到小的顺序. 思路 原来的栈为stack,申请的栈为help,当前stack的栈顶元素记为cur 如果cur小于help ...
- 栈和队列之用一个栈实现另一个栈的排序
用一个栈实现另一个栈的排序 题目: 一个栈元素的类型为整数,现在要想将该栈从顶到底按从大到小的顺序排列,只允许申请一个栈,除此之外, 可以申请一个变量,可以申请额外的变量,但是不能申请额外的数据结构, ...
- C/C++面试题—使用STL两个队列实现一个栈
题目介绍 使用STL中的两个队列实现一个栈,实现栈的top.pop.push.clear等操作. 思路分析 思路和使用2个栈实现一个队列是相通的,用一个队列queue1容器用来 压栈,出栈的时候判断q ...
- java 栈和队列实现迷宫代码_使用两个队列实现一个栈
两个队列实现一个栈 栈的特点是后进先出,队列的特点是先进先出.使用两个队列模拟栈,实现栈的push,pop,top,empty 操作. 假设队列中均为数字,其中队列q1为操作队列,q2为辅助队列. p ...
- 两个栈实现一个队列/两个队列实现一个栈
http://blog.csdn.net/sinat_30472685/article/details/70157227 1两个栈实现一个队列 1.原理分析: 队列的主要操作有两个:入队操作和出队操作 ...
最新文章
- 塔利亚菲科 ajax,[欧冠小组赛第4轮]阿贾克斯 3-1 中日德兰
- Exchange禁用中继后仍然被中继的处理方法
- 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章
- swift operation
- 一个机械系毕业生的感言
- reids 源码 zipmap.c 压缩map的实现
- checkbox大小缩放
- 单机实验mysql的主从备份(master slaver)
- django初体验 学习笔记
- python分号_在Python中拆分分号分隔的字符串
- 腾讯北大合作的稀疏大模型训练加速方案HET入选国际顶会VLDB
- html5 侧滑菜单,侧滑菜单
- JavaScript中事件的绑定与解绑
- C#版 - 小红书后台开发面试题: 二维数组中的查找
- 2020大学生网络安全知识总决赛模拟题错题集(9)
- [matlab] 7.快速搜索随机树(RRT---Rapidly-exploring Random Trees) 路径规划
- 2019第四届新媒体千人峰会广州站将于6月正式开幕!
- easypermission坑_Android EasyPermissions官方库高效处理权限相关教程
- rxbus 源码_RxBus---使用RxAndroid2.0实现RxBus
- python操作pdf做文档的分割、合并,内容提取