#ifndef QUEUE_CPP #define QUEUE_CPP #include using std::cout; template QueueNode::QueueNode() :next(0) {} template QueueNode::QueueNode(C item, QueueNode* n = 0) :data(item), next(n) {} template QueueNode* QueueNode::GetNext() { return next; } template C& QueueNode::GetItem() { return data; } template void QueueNode::SetNext(QueueNode* n) { next = n; } template void QueueNode::SetItem(C item) { data = item; } //////////////////////////////////////////////////////////// template Queue::Queue() :head(0), tail(0) {} template void Queue::Dump() { if(head == 0) { cout << "Empty\n"; return; } QueueNode* p = head; while(p) { cout << "(" << p->GetItem().r1 << ", " << p->GetItem().c1 << ") (" << p->GetItem().r2 << ", " << p->GetItem().c2 << ")\n"; p=p->GetNext(); } } template void Queue::Enqueue(C item) { QueueNode* ptr = new QueueNode(item, 0); if(head == 0) { head = tail = ptr; } else { tail->SetNext(ptr); tail = ptr; } } template C Queue::Dequeue() { QueueNode* temp = head; head = head->GetNext(); C c = temp->GetItem(); delete temp; return c; } template C& Queue::Peek() { return head->GetItem(); } template bool Queue::Empty() { return head == 0; } template Queue::~Queue() { delete head; } #endif