面试题7:用两个栈实现队列

题目描述

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

template <typename T> class CQueue
{
public:
    CQueue(void);
    ~CQueue(void);
    
    // 在队列末尾添加一个结点
    void appendTail(const T& node);

    // 删除队列的头结点
    T deleteHead();

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

题目分析

剑指Offer(纪念版)P59

代码实现

下面这两个函数的组合共同保证了队列插入删除的正确性,单个意思不大。

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 @ 2015-09-23 09:13  枯桃  阅读(138)  评论(0编辑  收藏  举报