template struct elem_q { T inf; elem_q *link; }; template class queue { public: queue(); ~queue(); queue(queue const &); queue& operator=(queue const &); bool empty() const; void InsertElem(T const &); int DeleteElem(T &); void print(); private: elem_q *front, *rear; void copyqueue(queue const &); void delqueue(); }; template queue::queue() { front = rear = NULL; } template queue::~queue() { delqueue(); } template queue::queue(queue const &r) { copyqueue(r); } template queue& queue::operator=(queue const &r) { if (this != &r) { delqueue(); copyqueue(r); } return *this; } template bool queue::empty() const { return rear == NULL; } template void queue::InsertElem(T const &x) { elem_q *p = new elem_q; p->inf = x; p->link = NULL; if (rear) rear->link = p; else front = p; rear = p; } template int queue::DeleteElem(T &x) { if (rear == NULL) return 0; x = front->inf; elem_q *p = front; if (front == rear) { front = NULL; rear = NULL; } else front = p->link; delete p; return 1; } template void queue::print() { T x; while (DeleteElem(x)) cout< void queue::delqueue() { T x; while (DeleteElem(x)) ; } template void queue::copyqueue(queue const &r) { front = rear = NULL; if (r.rear) { elem_q *p = r.front; while(p) { InsertElem(p->inf); p = p->link; } } }