两个队列实现一个栈
来源:互联网 发布:同性gv直播软件 编辑:程序博客网 时间:2024/05/05 16:53
解析:保证两个队列有一个队列为空,非空队列用于入队,空队列用于存储非空队列出队的元素,依次交替进行。
#include <iostream>#include <deque>#include <assert.h>using namespace std;template <class T> class CStack{public:CStack(){}~CStack(){}void stack_push(const T& element);void stack_pop();private:deque<T> deque1;deque<T> deque2;};template <class T> void CStack<T>::stack_push(const T& element)//变量入非空队列{if(deque1.size() > 0){deque1.push_back(element);}else if(deque2.size() > 0){deque2.push_back(element);}else{deque1.push_back(element);}}template <class T> void CStack<T>::stack_pop()//非空队列变量出队进入另一个空队列,直到仅剩一个元素{if(deque1.size()>0 && deque2.size()==0){while(deque1.size()>1){T data = deque1.front();deque1.pop_front();deque2.push_back(data);}assert(deque1.size()==1);T result = deque1.front();deque1.pop_front();cout<<result<<endl;}else if(deque2.size()>0 && deque1.size()==0){while(deque2.size()>1){T data = deque2.front();deque2.pop_front();deque1.push_back(data);}assert(deque2.size()==1);T result = deque2.front();deque2.pop_front();cout<<result<<endl;}}int main(){CStack<int> stack1;int data,i;cout<<"请输入入栈元素:"<<endl;for(i=0;i<5;i++){cin>>data;stack1.stack_push(data);}cout<<"出栈顺序为:"<<endl;for(i=0;i<5;i++)stack1.stack_pop();return 0;}
- 两个队列实现一个栈&两个栈实现一个队列
- 两个栈实现一个队列-----两个队列实现一个栈
- 两个栈实现一个队列&&两个队列实现一个栈
- 两个栈实现一个队列 && 两个队列实现一个栈
- 两个栈实现一个队列,两个队列实现一个栈
- 两个栈实现一个队列/两个队列实现一个栈
- 两个栈实现一个队列&两个队列实现一个栈
- 两个队列实现一个栈&两个栈实现一个队列
- 两个队列实现一个栈 / 两个栈实现一个队列
- 两个栈实现一个队列,两个队列实现一个栈
- 两个栈实现一个队列&两个队列实现一个栈
- 两个栈实现一个队列&&两个队列实现一个栈
- 两个栈实现一个队列&两个队列实现一个栈
- 两个栈实现一个队列/两个队列实现一个栈
- 两个栈实现一个队列
- 两个栈实现一个队列
- 两个栈实现一个队列
- 两个栈实现一个队列
- 虚拟化基础服务器模板用CENTOS6的MINI版安装后的在线扩展基本存储
- ASP 错误代码 描述
- System.FormatException: 该字符串未被识别为有效的 DateTime
- 丑数问题
- 深入linux设备驱动程序内核机制(第五章) 读书笔记
- 两个队列实现一个栈
- Ext JS百强应用:‘this field is required!’,如何改变textfield提示信息?--第3强
- HTTP协议详解
- HTTP协议详解
- 史上最全的iOS面试题及答案
- IE下操作删除本地文件
- ubuntu 非正常启动进不了图形界面
- el表达式解析
- i386 i586 i686 的意思