用两个栈实现队列

题目

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

template<typename T> class Queue
{
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;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容