Member Functions for Queue ADT - Pointer Based Implementation


// *********************************************************
// Implementation file Queueptr.cpp for the ADT Queue.
// Pointer-based implementation.
// *********************************************************
#include "Queueptr.h"  // header file
#include     // for NULL

Queue::Queue() : BackPtr(NULL)
{ }  // end default constructor

Queue::Queue(Queue& Q)
{  // Implementation left as an exercise (Exercise 4).
}  // end copy constructor

Queue::~Queue()
{
   int Success;
   while (!isEmpty())
      Success = del();
   // Assertion: BackPtr == NULL
}  // end destructor

int Queue::isEmpty()
{
   return (BackPtr == NULL);
}  // end isEmpty

int Queue::insert(queueItemType NewItem)
{
   // create a new node
   ptrType NewPtr = new queueNode;
   int Success = (NewPtr != NULL);  // check allocation
   if (Success)
   {
   // allocation successful; set data portion of new node
      NewPtr->Item = NewItem;

      // insert the new node
      if (isEmpty())
         // insertion into empty Queue
         NewPtr->Next = NewPtr;
      else
      {
         // insertion into nonempty Queue
         NewPtr->Next = BackPtr->Next;
         BackPtr->Next = NewPtr;
      }  // end if
      BackPtr = NewPtr;  // new node is at back
   }  // end if
   return Success;
}  // end insert

int Queue::del()
{
   int Success = (!isEmpty());
   if (Success)
   {
      // Queue is not empty; remove front
      ptrType FrontPtr = BackPtr->Next;
      if (FrontPtr == BackPtr)   // special case?
         BackPtr = NULL;         // yes, one node in Queue
      else
         BackPtr->Next = FrontPtr->Next;
      FrontPtr->Next = NULL;  // defensive strategy
      delete FrontPtr;
   }  // end if
   return Success;
}  // end del

int Queue::del(queueItemType& QueueFront)
{
   int Success = (!isEmpty());
   if (Success)
   {
      // Queue is not empty; retrieve front
      ptrType FrontPtr = BackPtr->Next;
      QueueFront = FrontPtr->Item;
      Success = del();  // delete front
   }  // end if
   return Success;
}  // end del

int Queue::getFront(queueItemType& QueueFront)
{
   int Success = (!isEmpty());
   if (Success)
   {
      // Queue is not empty; retrieve front
      ptrType FrontPtr = BackPtr->Next;
      QueueFront = FrontPtr->Item;
   }   // end if
   return Success;
}  // end getFront
// End of implementation file.


Email Me | Office Hours | My Home Page | Department Home | MCC Home Page