#ifndef QUEUE #define QUEUE #define NULL_PTR 0 template struct Node { Element Info; Node *Next; }; template class Queue { public: Queue(); void Empty(); int Size(); void Enqueue(Element Add); Element Dequeue(); protected: Node *NextOut; Node *LastIn; int ElementCount; }; template Queue::Queue() { ElementCount = 0; NextOut = NULL_PTR; LastIn = NULL_PTR; } template void Queue::Empty() { while (ElementCount > 0) Dequeue(); } template int Queue::Size() { return ElementCount; } template void Queue::Enqueue(Element Add) { if (ElementCount == 0) { NextOut = new Node; LastIn = NextOut; } else { LastIn->Next = new Node; LastIn = LastIn->Next; } LastIn->Info = Add; LastIn->Next = NULL_PTR; ElementCount++; } template Element Queue::Dequeue() { Element Result; if (ElementCount != 0) { Node *ToDelete; ToDelete = NextOut; Result = NextOut->Info; NextOut = NextOut->Next; delete ToDelete; ElementCount--; } return Result; } #endif