// -*- C++ -*- #ifndef __QUEUE_H #define __QUEUE_H #include template class queue { public: queue(); ~queue(); void enqueue(const T& in); bool empty() const { return !head; } // Copy into the parameter void dequeue(T& out); void front(T& out); private: // Don't copy me or pass me by value! queue(const queue& that); queue& operator=(const queue& that); struct node { node(const T& in) : data(in), next(0) { } T data; node* next; }; node* head; node* tail; }; template queue::queue() : head(0), tail(0) { } template queue::~queue() { while (head) { tail = head->next; delete head; head = tail; } } template void queue::enqueue(const T& data) { node* n = new node(data); if (head) { tail->next = n; tail = n; } else head = tail = n; } template void queue::front(T& data) { assert(!empty()); data = head->data; } template void queue::dequeue(T& data) { assert(!empty()); data = head->data; node* victim = head; head = head->next; delete victim; } #endif