C++中用两个栈实现一个队列
想要利用两个栈实现一个队列, 首先我们需要搞清楚栈和队列的特性, 栈是后进先出, 是一个压栈的过程, 而队列则是先进先出的一个过程.
用两个栈去实现一个队列, 该怎样做, 首先假如我们有一组数据 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++中用两个栈实现一个队列相关推荐
- 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...
多态 /*1. 要想实现覆盖(重写)父类必须声明为virtual,子类可以不声明为virtual.-->FunB()2. 派生类重写基类的虚函数实现多态,要求函数名.参数列表.返回值完全相同.( ...
- 【剑指offer】用两个栈实现一个队列
题目:两个栈实现一个队列. 栈的特点:先进后出,队列的特点是先进先出 思路:stack1放入数据:pop时,先判断stack2是否为空,如果不为空,直接pop,如果空,则push(stack1.pop ...
- 剑指offer五:两个栈实现一个队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. package com.jianzhioffer;import java.util.Stack;publ ...
- 两个栈实现一个队列,两个队列实现一个栈
题目:用两个栈实现一个队列,用两个队列实现一个栈. 首先要了解栈和队列这两种数据结构各自的特点,栈是一种后入先出(Last In First Out,LIFO)的数据结构,队列是一种先进先出(Firs ...
- python 用两个栈实现一个队列
| 两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素 ...
- java实现-两个栈实现一个队列和两个队列实现一个栈
1.两个栈实现一个队列 思路:压入元素直接入stack1,删除元素先判断stack2中是否为空,如果不为空直接弹出:为空则将stack1中的元素取出压入 stack2中再弹出. 代码: import ...
- python ——两个队列实现一个栈两个栈实现一个队列
1.两个队列实现一个栈 进栈:元素入队列A 出栈:判断如果队列A只有一个元素,则直接出队.否则,把队A中的元素出队并入队B,直到队A中只有一个元素,再直接出队.为了下一次继续操作,互换队A和队B. p ...
- 两个栈实现一个队列与两个队列实现一个栈
http://blog.csdn.net/z84616995z/article/details/19204529 两个栈实现一个队列: 原理方法:用一个栈为主栈,一个栈为辅助栈存放临时元素. 入队:将 ...
- 【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)
http://blog.csdn.net/hanjing_1995/article/details/51539578 使用两个栈实现一个队列 思路一: 我们设定s1是入栈的,s2是出栈的. 入队列,直 ...
- 两个栈实现一个队列/两个队列实现一个栈
http://blog.csdn.net/sinat_30472685/article/details/70157227 1两个栈实现一个队列 1.原理分析: 队列的主要操作有两个:入队操作和出队操作 ...
最新文章
- linux系统定时检查网络状态python脚本
- QTP的那些事--web测试脚本不能录制的解决方法(个人整理未完待续)
- BZOJ 1013: [JSOI2008]球形空间产生器sphere 高斯消元
- Mac启动时:boot task failed:fsck-safe处理办法
- 计算机一级单元格公式设置错误是什么原因,excel表格公式出错怎么解决,电子表格求和出错...
- LeetCode-20:有效的括号
- Javashop 7.0 增加小程序支付(二次开发)
- 简约毕业论文答辩PPT模板
- 《麻省理工学院公开课:人工智能》笔记二
- 功能强大的截图软件——Snipaste
- Android安装包APK如何解压
- 2017 开源中国新增开源项目排行榜 TOP 100
- 过勇 清华计算机系,16位清华学霸的简历—比你牛的人还比你努力,膝盖已跪碎...
- 04 - Linux的用户与组文件
- 自动气象站解决方案 案例分享
- 音频转换器怎么将ogg转换mp3格式
- 汤森路透 Thomson Reuters --使用多模型数据库ArangoDB 打造快速安全的简单视图分析...
- 对检测出来的结果单独进行softnms操作
- 木筏求生1.0.0游戏
- java 适配器模式示例