【学习点滴-数据结构-栈&队列】 用两个队列模拟一个栈
来源:互联网 发布:中国域名的属性 编辑:程序博客网 时间:2024/05/09 07:59
题目描述:用两个队列模拟一个栈。栈和队列的实现源码已经给出。
本文系转载。
原文地址:http://blog.csdn.net/wangyangkobe/article/details/5910362
@wangyangkobe
#include <cstdlib>#include <iostream>#include <assert.h>#include <deque>using namespace std;/*两个队列模拟一个堆栈*//*队列A、B入栈:将元素依次压入到非空的队列,第一个元素压倒对列A出栈:把队列A的前n-1个元素倒到队列B,把第n个元素去掉。此时数据在B中,下次操作,则对B操作。栈顶:把队列A的前n-1个元素倒到队列B,把第n个元素作为栈顶*/template <typename T>class MyStack{public://入栈,第一个元素进到队列deque1,以后每个元素进到非空的队列void push(T element){if (deque1.empty() && deque2.empty()){deque1.push_back(element);}else if (!deque1.empty() && deque2.empty()){deque1.push_back(element);}else if (deque1.empty() && !deque2.empty()){deque2.push_back(element);}}//出栈,将非空队列的前n-1个元素转移到另一个空的队列,删除非空队列的第n个元素void pop(){if (!deque1.empty()){int size = deque1.size();for (int i=0; i<size-1; i++){deque2.push_back(deque1.front());deque1.pop_front();}deque1.pop_front();}else{int size = deque2.size();for (int i=0; i<size-1; i++){deque1.push_back(deque2.front());deque2.pop_front();}deque2.pop_front();}}//栈顶元素,将非空队列的前n-1个元素转移到另一个空的队列,将非空队列的第n个元素返回T top(){if (!deque1.empty()){int size = deque1.size();for (int i=0; i<size-1; i++){deque2.push_back(deque1.front());deque1.pop_front();}T temp = deque1.front();deque1.pop_front();deque2.push_back(temp);return temp;}else{int size = deque2.size();for (int i=0; i<size-1; i++){deque1.push_back(deque2.front());deque2.pop_front();}T temp = deque2.front();deque2.pop_front();deque1.push_back(temp);return temp;}}//栈是否为空bool empty(){return (deque1.empty()&&deque2.empty());}private:deque<T> deque1;deque<T> deque2;};int main(int argc, char *argv[]){MyStack<int> my;for (int i=0; i<10; i++){my.push(i);}while (!my.empty()){cout<<my.top()<<" ";my.pop();}cout<<endl;}
- 【学习点滴-数据结构-栈&队列】 用两个队列模拟一个栈
- 【学习点滴-数据结构-栈&队列】 用两个栈模拟一个队列
- 数据结构 用两个栈来模拟一个队列
- 两个栈模拟一个队列/两个队列模拟一个栈
- 【学习点滴-数据结构-栈&队列】 颠倒一个栈。
- 两个栈模拟一个队列
- 两个队列模拟一个栈
- 两个队列模拟一个栈
- 两个队列模拟一个栈
- 两个栈模拟一个队列
- 两个队列模拟一个栈
- 两个栈模拟一个队列
- 两个队列模拟一个栈
- 两个栈模拟一个队列
- 两个栈模拟一个队列
- 用两个栈模拟一个队列
- 用两个栈模拟一个队列
- 用两个队列模拟一个栈
- 如何用PHP来操作XML的内容
- STL提供了很多高效的算法
- 一起讨论与分亨Java面试题
- 开源硬件如何让昂贵的3D打印机器变得低廉?
- 黑马程序员--Java学习日记9_基础加强
- 【学习点滴-数据结构-栈&队列】 用两个队列模拟一个栈
- Oracle EBS使用adpatch工具打patch过程(hotpatch mode)
- 虚拟机下11g r2 RAC安装root时报:Timed out waiting for the CRS stack to start.
- flex标尺的实现
- ecshop 下拉购物车加删除功能
- 【算法导论】c++实现的随机化的快速排序
- 信长城面经
- 异常捕获
- QtEmbedded软键盘输入法实战(附例子)