用两个队列实现栈(C++模板)

来源:互联网 发布:有源码怎么做辅助 编辑:程序博客网 时间:2024/05/22 14:12

这个可以和上一篇文章<<用两个栈实现队列>>对比着来学习。算法思想很简单,直接上代码吧:

#include<iostream>#include<queue>using namespace std;template<typename T> class CStack{private:    queue<T> q1;    queue<T> q2;    int nCount;public:     CStack();    ~CStack();    void appendTail(const T& data);    T deleteTail();    int GetNum() const;};template<typename T> CStack<T>::CStack(){    nCount=0;}template<typename T> CStack<T>::~CStack(){}template<typename T> void CStack<T>::appendTail(const T& data){    if(q1.size()==0 && q2.size()==0)    {        q1.push(data);    }    else if(q1.size()>0)    {        q1.push(data);    }    else if(q2.size()>0)    {        q2.push(data);    }    ++nCount;}template<typename T> T CStack<T>::deleteTail(){    T element;    if(q2.size()==0)    {         while(q1.size()!=1)         {             T& data=q1.front();             q1.pop();             q2.push(data);         }         element=q1.front();         q1.pop();         cout<<element<<endl;    }    else{        while(q2.size()!=1)        {            T& data=q2.front();            q2.pop();            q1.push(data);        }        element=q2.front();        q2.pop();        cout<<element<<endl;    }    --nCount;    return element;}int main(){    CStack<int> stack1;    stack1.appendTail(1);    stack1.appendTail(2);    stack1.appendTail(3);    int DATA=stack1.deleteTail();    stack1.appendTail(4);    DATA=stack1.deleteTail();    DATA=stack1.deleteTail();    DATA=stack1.deleteTail();    system("pause");    return 0;}

这里写图片描述

原创粉丝点击