MS_Queue.cpp
上传用户:qdkongtiao
上传日期:2022-06-29
资源大小:356k
文件大小:2k
源码类别:

书籍源码

开发平台:

Visual C++

  1. #include "MS_Queue.h"
  2. #include <stdexcept>
  3. using std::out_of_range;
  4. #include <iostream>
  5. using std::ostream; 
  6. template <class Type>
  7. void Queue<Type>::copy_elems(const Queue &orig)
  8. {
  9.     // copy elements from orig into this Queue
  10.     // loop stops when pt == 0, which happens when we reach orig.tail
  11.     for (QueueItem<Type> *pt = orig.head; pt; pt = pt->next)
  12.         push(pt->item);  // copy the element
  13. }
  14. template <class Type>
  15. Queue<Type>& Queue<Type>::operator=(const Queue &rhs)
  16. {
  17.     if (this != &rhs) {
  18.         // destroy elements on this Queue
  19.         destroy();
  20.         copy_elems(rhs);    // copy from rhs into left-hand Queue
  21.     }
  22.     return *this;
  23. }
  24. template <class Type> void Queue<Type>::destroy()
  25. {
  26.     while (!empty())
  27.         pop();
  28. }
  29. template <class Type> void Queue<Type>::push(const Type &val)
  30. {
  31.     // allocate a new QueueItem object
  32.     QueueItem<Type> *pt = new QueueItem<Type>(val);
  33.     // put item onto existing queue
  34.     if (empty())
  35.         head = tail = pt;   // the queue now has only one element
  36.     else {
  37.         tail->next = pt;    // add new element to end of the queue
  38.         tail = pt;
  39.     }
  40. }
  41. template <class Type> void Queue<Type>::pop()
  42. {
  43.     // pop is unchecked: Popping off an empty Queue is undefined 
  44.     QueueItem<Type>* p = head;  // keep pointer to head so we can delete it
  45.     head = head->next;          // head now points to next element
  46.     delete p;                   // delete old head element
  47. }
  48. template <class Type>
  49. ostream& operator<<(ostream &os, const Queue<Type> &q)
  50. {
  51.     os << "< ";
  52.     QueueItem<Type> *p;
  53.     for (p = q.head; p; p = p->next)
  54.             os << p->item << " ";
  55.     os <<">";
  56.     return os;
  57. }