用两个栈实现队列

来源:互联网 发布:php框架类库有哪些 编辑:程序博客网 时间:2024/06/08 15:40

剑指offer面试题7
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。

template <typename Type>class CQueue{public:    void appendTail(const Type& node);    Type deleteHead();private:    stack<Type> stack1;//入队    stack<Type> stack2;//将stack1的元素全部入到stack2中,再出};template<typename Type>void CQueue<Type>::appendTail(const Type& node){    stack1.push(node);}template<typename Type>Type CQueue<Type>::deleteHead(){    if(stack2.size() <=0 )    {        while(!stack1.empty())        {            Type& tmp = stack1.top();            stack1.pop();            stack2.push(tmp);        }    }    if(stack2.size() == 0)        throw new exception("queue is empty");    Type top = stack2.top();    stack2.pop();    return top;}int main(){    CQueue<int> q;    for(int i=0;i<10;i++)        q.appendTail(i);    for(int i=0;i<10;i++)    {        int tmp = q.deleteHead();        cout<<tmp<<ends;    }    cout<<endl;    return 0;}
原创粉丝点击