// P.J. Waskiewicz 4/15/1998
// File: Tqueue.cc
// Implementation of queue ADT using a linked list
#include "Tqueue.h"
template <class T>
Queue <T>::Queue()
{
// set both front and rear to null pointers
f = 0;
r = 0;
}
template <class T>
void Queue <T>::enqueue(T e)
{
// create a new node, insert it at the rear of the queue
nodePtr n(new Node);
assert(n);
n->next = 0;
n->data = e;
if(f != 0) { // existing queue is not empty
r->next = n; // add new element to end of list
r = n;
}
else { // adding first item in the queue
f = n; // so front, rear must be same node
r = n;
}
}
template <class T>
T Queue<T>::dequeue()
{
assert(f); // make sure queue is not empty
nodePtr n(f);
T frontElement(f->data);
f = f->next;
delete n;
if(f == 0) // we're deleting last node
r = 0;
return frontElement;
}
template <class T>
T Queue<T>::front()
{
assert(f);
return f->data;
}
template <class T>
bool Queue<T>::isEmpty()
{
// true if the queue is empty -- when f is a null pointer
return f == 0;
}