剑指offer---用两个栈实现队列(7)

来源:互联网 发布:51单片机蜂鸣器程序 编辑:程序博客网 时间:2024/05/20 01:46


题目:用两个栈实现一个队列,队列的声明如下,请实现它的两个函数addendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点。


思想:对stack1,和stack2操作来实现队列的入队和出队。

入队:直接push进stack1中。
出队:如果stack2为空,将stack1中的全部元素依次出栈压入到stack2中,再对stack2进行出栈操作。

template <typename T>class cQueue{public:    cQueue();    ~cQueue();    void appendTail(const T& node);    T deleteHead();private:    stack<T> stack1;    stack<T> stack2;};template <typename T>void cQueue<T>::appendTail(const T& node){    stack1.push(node);}template <typename T>T cQueue<T>::deleteHead(){    if(stack2.size() <= 0)    {        while(!stack1.empty())        {            T& data = stack1.top();            stack2.push(data);            stack1.top();        }    }    if(stack2.size() == 0)    {        throw new exception("queue is empty");    }    T head = stack2.top();    stack2.pop();    return head;}
原创粉丝点击