剑指offer:用两个栈实现队列

题目:用两个栈实现一个队列。请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除结点的功能。队列的声明如下:
  1. template <typename T> class CQueue
  2. {
  3. public:
  4. CQueue(void);
  5. ~CQueue(void);
  6. // 在队列末尾添加一个结点
  7. void appendTail(const T& node);
  8. // 删除队列的头结点
  9. T deleteHead();
  10. private:
  11. stack<T> stack1;
  12. stack<T> stack2;
  13. };


  1. template<typename T> void CQueue<T>::appendTail(const T& element)
  2. {
  3. stack1.push(element);
  4. }
  5. template<typename T> T CQueue<T>::deleteHead()
  6. {
  7. if(stack2.size()<= 0)
  8. {
  9. while(stack1.size()>0)
  10. {
  11. T& data = stack1.top();
  12. stack1.pop();
  13. stack2.push(data);
  14. }
  15. }
  16. if(stack2.size() == 0)
  17. throw new exception("queue is empty");
  18. T head = stack2.top();
  19. stack2.pop();
  20. return head;
  21. }








posted @ 2015-07-21 10:16  Lucas_1993  阅读(175)  评论(0编辑  收藏  举报