用两个栈实现队列

这个没什么好说的,原理就是先放入一个栈,要取数时先把数据全部放入到另一个栈,再出栈。

template <typename T> class CQueue
{
 public:
        CQueue(void);
        ~CQueue(void);
    
        void appendTail(const T& node);
        T deleteHead();

private:
        stack<T> stack1;
        stack<T> stack2;
};

template <typename T> void CQueue<T>::appendTail(const T&    element)
{
        stack1.push(element);
}

template <typename T> T CQueue<T>::deleteHead()
{
    if(stack2.size() <=0)
    {
        while(stack1.size() > 0)
        {
               T& data = stack1.top();//注意这里的&
               stack1.pop();
               stack2.push(data);
        }    
    }

    if( stack2.size() == 0)
            throw new exception("queue is empty");
    
    T head = stack2.top();
    stack2.pop();

    return head;
}                                

 

posted @ 2013-03-02 21:05  没离开过  阅读(86)  评论(0)    收藏  举报