(Latest Revision: Sun Apr 15 02:38:56 PDT 2001 ) deque.cpp

deque.cpp


// *********************************************************
// Implementation file deque.cpp for the ADT deque.
// Pointer-based implementation.
// *********************************************************

#include <iostream.h>
#include <iomanip.h>
#include "deque.h"  // header file
#include <stddef.h>  // for NULL

// The deque is implemented as a circular doubly linked list
// with one external pointer to the back of the deque.

struct dequeNode
{  
   dequeItemType Item;
   ptrType       Next;
   ptrType       Prev;
};  // end struct

dequeClass::dequeClass() : BackPtr(NULL), Size(0)
{
}  // end default constructor

dequeClass::~dequeClass()
{
   /* FILL THIS IN */
}  // end destructor

bool dequeClass::IsEmpty() const
{
   /* FILL THIS IN */
}  // end IsEmpty

int dequeClass::Length() const
{
   /* FILL THIS IN */
}  // end Length

void dequeClass::AddInRear(dequeItemType NewItem, bool& Success)
{
   // create a new node
   ptrType NewPtr = new dequeNode;

   Success = bool(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 deque
         NewPtr->Next = NewPtr;
         NewPtr->Prev = NewPtr;
      }
      else
      {      // insertion into nonempty deque
         NewPtr->Next = BackPtr->Next;
         NewPtr->Prev = BackPtr ;
         BackPtr->Next->Prev = NewPtr ;
         BackPtr->Next = NewPtr;
            /* Note: This works if we are adding the second element */
      }  // end if

      BackPtr = NewPtr;  // new node is at back
      Size++ ;
   }  // end if
}  // end AddInRear

void dequeClass::AddInFront(dequeItemType NewItem, bool& Success)
{
   /* FILL THIS IN */
}  // end AddInFront

void dequeClass::TakeOutFront(dequeItemType& DequeFront, bool& Success)
{
   /* FILL THIS IN */
}  // end TakeOutFront

void dequeClass::TakeOutRear(dequeItemType& DequeRear, bool& Success)
{
   /* FILL THIS IN */
}  // end TakeOutRear

void dequeClass::Print() const
{
   /* FILL THIS IN */
}

// End of implementation file.