Implement the Queue ADT using array based approach Using C

Implement the Queue ADT using array – based approach. Using C++ programming Language

#include \"QueueArray.h\"

template <typename DataType>
QueueArray<DataType>::QueueArray(int maxNumber)
{
}

template <typename DataType>
QueueArray<DataType>::QueueArray(const QueueArray& other)
{
}

template <typename DataType>
QueueArray<DataType>& QueueArray<DataType>::operator=(const QueueArray& other)
{
}

template <typename DataType>
QueueArray<DataType>::~QueueArray()
{
}


template <typename DataType>
void QueueArray<DataType>::enqueue(const DataType& newDataItem) throw (logic_error)
{
}

template <typename DataType>
DataType QueueArray<DataType>::dequeue() throw (logic_error)
{
   DataType temp;
   return temp;
}

template <typename DataType>
void QueueArray<DataType>::clear()
{
}

template <typename DataType>
bool QueueArray<DataType>::isEmpty() const
{
   return false;
}

template <typename DataType>
bool QueueArray<DataType>::isFull() const
{
   return false;
}

template <typename DataType>
void QueueArray<DataType>::putFront(const DataType& newDataItem) throw (logic_error)
{
}

template <typename DataType>
DataType QueueArray<DataType>::getRear() throw (logic_error)
{
   DataType temp;
   return temp;
}

template <typename DataType>
int QueueArray<DataType>::getLength() const
{
   return -1;
}

//--------------------------------------------------------------------

template <typename DataType>
void QueueArray<DataType>::showStructure() const
// Array implementation. Outputs the data items in a queue. If the
// queue is empty, outputs \"Empty queue\". This operation is intended
// for testing and debugging purposes only.

{
int j; // Loop counter

if ( front == -1 )
cout << \"Empty queue\" << endl;
else
{
cout << \"Front = \" << front << \" Back = \" << back << endl;
for ( j = 0 ; j < maxSize ; j++ )
cout << j << \"\\t\";
cout << endl;
if ( back >= front )
for ( j = 0 ; j < maxSize ; j++ )
if ( ( j >= front ) && ( j <= back ) )
cout << dataItems[j] << \"\\t\";
else
cout << \" \\t\";
else
for ( j = 0 ; j < maxSize ; j++ )
if ( ( j >= front ) || ( j <= back ) )
cout << dataItems[j] << \"\\t\";
else
cout << \" \\t\";
cout << endl;
}
}

QueueArray.h

___-----------------------------------------------------------------------------

#ifndef QUEUEARRAY_H
#define QUEUEARRAY_H

#include <stdexcept>
#include <iostream>

using namespace std;

#include \"Queue.h\"

template <typename DataType>
class QueueArray : public Queue<DataType> {
public:
QueueArray(int maxNumber = Queue<DataType>::MAX_QUEUE_SIZE);
QueueArray(const QueueArray& other);
QueueArray& operator=(const QueueArray& other);
~QueueArray();

void enqueue(const DataType& newDataItem) throw (logic_error);
DataType dequeue() throw (logic_error);

void clear();

bool isEmpty() const;
bool isFull() const;

void putFront(const DataType& newDataItem) throw (logic_error);
DataType getRear() throw (logic_error);
int getLength() const;

void showStructure() const;

private:
int maxSize;
int front;
int back;
DataType* dataItems;
};

#endif

Solution

QueueArray.cpp


#include \"QueueArray.h\"

template <typename DataType>
QueueArray<DataType>::QueueArray(int maxNumber)
{
   maxSize = maxNumber;
   this->dataItems = new DataType[maxSize];
   front = -1;
   back = -1;

}

template <typename DataType>
QueueArray<DataType>::QueueArray(const QueueArray& other)
{
   dataItems = new DataType[maxSize];

   for (int i = 0; i <= top; i++)
   {
       dataItems[i] = other.dataItems[i];
   }

}


template <typename DataType>
QueueArray<DataType>& QueueArray<DataType>::operator=(const QueueArray& other)
{
   if (maxSize < other.maxSize)
   {
       delete[] dataItems;
       dataItems = new dataType[other.maxSize];
   }

   maxSize = other.maxSize;
   top = other.top;

   for (int i = 0; i <= top; i++)
   {
       dataItems[i] = other.dataItems[i];
   }

   return *this;
}

template <typename DataType>
QueueArray<DataType>::~QueueArray()
{
   this->clear();
}


template <typename DataType>
void QueueArray<DataType>::enqueue(const DataType& newDataItem) throw (logic_error)
{
   if (this->isFull())
       throw logic_error(\"Queue is Full.\");
   if (this->isEmpty())
   {
       dataItems[back + 1] = newDataItem;
       back = (++back) % maxSize;
       front++;
   }
   else if (back == 7 && !isFull())
   {
       back = 0;
       dataItems[back] = newDataItem;
   }
   else {
       back = (++back) % maxSize;
       dataItems[back] = newDataItem;
   }

}

template <typename DataType>
DataType QueueArray<DataType>::dequeue() throw (logic_error)
{
   if (this->isEmpty())
       throw logic_error(\"Queue is empty. \");

   if (getLength() == 1)
   {
       DataType temp = dataItems[this->front];
       clear();
       return temp;
   }

   else {
       DataType temp;
       temp = dataItems[this->front];
       front++;
       return temp;
   }
}

template <typename DataType>
void QueueArray<DataType>::clear()
{
   front = -1;
   back = -1;
}

template <typename DataType>
bool QueueArray<DataType>::isEmpty() const
{
   return (front == -1);
}

template <typename DataType>
bool QueueArray<DataType>::isFull() const
{
   return (getLength() == this->maxSize);
}

template <typename DataType>
void QueueArray<DataType>::putFront(const DataType& newDataItem) throw (logic_error)
{
   if (isFull())
       throw logic_error(\"Queue is Full.\");
   else {
       if (isEmpty())
       {
           front = 0;
           back = 0;
       }
       else {
           front--;
           if (front < 0)
               front = (maxSize - 1);
       }

       dataItems[front] = newDataItem;
   }

}

template <typename DataType>
DataType QueueArray<DataType>::getRear() throw (logic_error)
{
   int cursor = -1;
   if (isEmpty()) {
       throw logic_error(\"Queue is Empty.\");
   }
   else {
       cursor = back;
       if (front == back)
       {
           front = -1;
           back = -1;
       }
       else
       {
           --back;
           if (back < 0)
               back = (maxSize - 1);
       }

       return dataItems[cursor];
   }
  
}

template <typename DataType>
int QueueArray<DataType>::getLength() const
{
   if (front > back)
       return (back - front + maxSize + 1);
   else
       return back - front + 1;
}

//--------------------------------------------------------------------

template <typename DataType>
void QueueArray<DataType>::showStructure() const
// Array implementation. Outputs the data items in a queue. If the
// queue is empty, outputs \"Empty queue\". This operation is intended
// for testing and debugging purposes only.

{
   int j;   // Loop counter

   if (front == -1)
       cout << \"Empty queue\" << endl;
   else
   {
       cout << \"Front = \" << front << \" Back = \" << back << endl;
       for (j = 0; j < maxSize; j++)
           cout << j << \"\\t\";
       cout << endl;
       if (back >= front)
           for (j = 0; j < maxSize; j++)
               if ((j >= front) && (j <= back))
                   cout << dataItems[j] << \"\\t\";
               else
                   cout << \" \\t\";
       else
           for (j = 0; j < maxSize; j++)
               if ((j >= front) || (j <= back))
                   cout << dataItems[j] << \"\\t\";
               else
                   cout << \" \\t\";
       cout << endl;
   }
}

QueueArray.h

// QueueArray.h

#ifndef QUEUEARRAY_H
#define QUEUEARRAY_H

#include <stdexcept>
#include <iostream>

using namespace std;

#include \"Queue.h\"

template <typename DataType>
class QueueArray : public Queue<DataType> {
public:
   QueueArray(int maxNumber = Queue<DataType>::MAX_QUEUE_SIZE);
   QueueArray(const QueueArray& other);
   QueueArray& operator=(const QueueArray& other);
   ~QueueArray();

   void enqueue(const DataType& newDataItem) throw (logic_error);
   DataType dequeue() throw (logic_error);

   void clear();

   bool isEmpty() const;
   bool isFull() const;

   void putFront(const DataType& newDataItem) throw (logic_error);
   DataType getRear() throw (logic_error);
   int getLength() const;

   void showStructure() const;

private:
   int maxSize;
   int front;
   int back;
   DataType* dataItems;
};

#endif

Queue.h

#ifndef QUEUE_H
#define QUEUE_H

#include <stdexcept>
#include <iostream>

using namespace std;

#pragma warning( disable : 4290 )

//--------------------------------------------------------------------

template <typename DataType>
class Queue {
public:
   static const int MAX_QUEUE_SIZE = 8;

   virtual ~Queue();

   virtual void enqueue(const DataType& newDataItem) throw (logic_error) = 0;
   virtual DataType dequeue() throw (logic_error) = 0;

   virtual void clear() = 0;

   virtual bool isEmpty() const = 0;
   virtual bool isFull() const = 0;

  
#if LAB7_TEST2
   virtual void putFront(const DataType& newDataItem) throw (logic_error) = 0;
   virtual DataType getRear() throw (logic_error) = 0;
#endif
#if LAB7_TEST3
   virtual int getLength() const = 0;
#endif

   virtual void showStructure() const = 0;
};

template <typename DataType>
Queue<DataType>::~Queue()
// Not worth having a separate class implementation file for the destuctor
{}

#endif       // #ifndef QUEUE_H

Implement the Queue ADT using array – based approach. Using C++ programming Language #include \
Implement the Queue ADT using array – based approach. Using C++ programming Language #include \
Implement the Queue ADT using array – based approach. Using C++ programming Language #include \
Implement the Queue ADT using array – based approach. Using C++ programming Language #include \
Implement the Queue ADT using array – based approach. Using C++ programming Language #include \
Implement the Queue ADT using array – based approach. Using C++ programming Language #include \
Implement the Queue ADT using array – based approach. Using C++ programming Language #include \
Implement the Queue ADT using array – based approach. Using C++ programming Language #include \

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site