两个队列实现一个栈

来源:互联网 发布:同性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;}