第七题 用两个栈实现队列

来源:互联网 发布:linux渗透测试系统 编辑:程序博客网 时间:2024/06/01 09:16

题目:用两个栈实现队列,队列的声明如下,用两个函数appendTail和deleteHead实现尾插和头删:

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

插入元素选择直接插入到一个stack里面就可以了,删除元素可以利用空余的栈去实现,(先判断空余栈是否为空)把之前插入的元素出栈再入到空余栈中,顺序就又反回来了,然后依此出栈就可以了。

template<typename T>void CQueue<T>::appendTail(const T& element){    stack1.push(element);}template<typename T>T CQueue<T>::deleteHead(){    if(stack2.empty())    {        while(!stack1.empty())        {            T data = stack1.top();            stack1.pop();            stack2.push(data);        }    }    if(stack2.empty())    {        throw new exception("queue is empty");    }    T head = stack2.top();    stack2.pop();    return head;}