美文网首页
双栈实现队列

双栈实现队列

作者: kuizhu | 来源:发表于2018-07-21 10:08 被阅读0次

    主要思想

    有两个栈stack1stack2
    在push时,直接压入stack1
    在pop时,判断stack2是否为空,空则将stack1的数据压入stack2,不空则只需将stack2的栈顶弹出。

    代码实现

    #ifndef _MYQUEUE_H_
    #define _MYQUEUE_H_
    
    #include<iostream>
    #include<stack>
    using namespace std;
    
    template<class T> class Test
    {
    public:
        Test();
        T pop();
        void push(T element);
    private:
        stack<T> stk1;
        stack<T> stk2;
    
        
    };
    template<class T> Test<T>::Test() { }
    
    template<class T> T Test<T>::pop()
    {
        //TODO:检查stk2中是否为空,不空,则直接弹出stk2的栈顶;
        //否则,将stk1中的size-1个倒入stk2;返回stk1    栈底元素
        T retVal;
        if (!stk2.empty())
        {
            retVal = stk2.top();
            stk2.pop();
            return retVal;
        }
        else
        {
            T tmp;
            while (stk1.size() > 1)
            {
                tmp = stk1.top();
                stk2.push(tmp);
                stk1.pop();
            }
            tmp = stk1.top();
            stk1.pop();
            retVal = tmp;
            return retVal;
        }
    }
    
    template<class T> void Test<T>::push(T element)
    {
        stk1.push(element);
    }
    
    #endif
    

    注意,模板类的声明和定义需要在一个文件中

    相关文章

      网友评论

          本文标题:双栈实现队列

          本文链接:https://www.haomeiwen.com/subject/qczcmftx.html