Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

The following is an abstract base class of char queue: class CharQueue { public:

ID: 3631410 • Letter: T

Question

The following is an abstract base class of char queue:

class CharQueue
{
public:
virtual bool isEmpty() const = 0;
virtual void enqueue(const char newItem) = 0;
virtual char dequeue(void) = 0; // dequeue an item and return its value
virtual char getFront(void) const = 0; // return the value of the first item in the queue (but do not dequeue it)
}

Write a point-based implementation of a queue class PointerCharQueue that derives from class CharQueue and implement all the methods.
Your solution must uses a circular linked list to represent the items in the queue.

You also need to implement a copy constructor, a destructor. Moreover, you need to overload the "=" and "==" operators.
Write test code to show these methods do work correctly.

Explanation / Answer

#include<iostream>

using namespace std;

template<class T>

class CharQueue

{

private:

T *queueArray;

int queueSize;

int front;

int rear;

int numItems;

public:

CharQueue(int);

CharQueue(const CharQueue &);

~CharQueue();

void enqueue(T);

void dequeue(T &);

bool isEmpty() const;

};

template<class T>

CharQueue<T>::CharQueue(int s)

{

queueArray = new T[s];

queueSize = s;

front = -1;

rear = -1;

numItems = 0;

}

template<class T>

CharQueue<T>::CharQueue(const CharQueue &obj)

{

queueArray = new int[obj.queueSize];

queueSize = obj.queueSize;

front = obj.front;

rear = obj.rear;

numItems = obj.numItems;

for (int count = 0; count < obj.queueSize; count++)

queueArray[count] = obj.queueArray[count];

}

template<class T>

CharQueue<T>::~CharQueue()

{

delete [] queueArray;

}

template<class T>

void CharQueue<T>::enqueue(T num)

{

rear = (rear + 1) % queueSize;

queueArray[rear] = num;

numItems++;

}

template<class T>

void CharQueue<T>::dequeue(T &num)

{

if (isEmpty())

cout << "The queue is empty. ";

else

{

front = (front + 1) % queueSize;

num = queueArray[front];

numItems--;

}

}

template<class T>

bool CharQueue<T>::isEmpty() const

{

bool status;

if (numItems)

status = false;

else

status = true;

return status;

}

int main()

{

const int MAX_VALUES = 5;

CharQueue<int> iQueue(MAX_VALUES);

CharQueue<char> iQueue1(10);

cout << " Now attempting to enqueue again... ";

iQueue1.enqueue('c');

iQueue1.enqueue('p');

iQueue1.enqueue('p');

iQueue1.enqueue('p');

iQueue1.enqueue('r');

iQueue1.enqueue('o');

iQueue1.enqueue('g');

iQueue1.enqueue('r');

iQueue1.enqueue('a');

iQueue1.enqueue('m');

cout << "The values in the queue were: ";

while (!iQueue1.isEmpty())

{

char value;

iQueue1.dequeue(value);

cout << value ;

}

cout<<" "<<endl;

char value;

iQueue1.dequeue(value);

cout << "Enqueuing " << MAX_VALUES << " items... ";

for (int x = 0; x < MAX_VALUES; x++)

iQueue.enqueue(x);

cout << " Now attempting to enqueue again... ";

iQueue.enqueue(MAX_VALUES);

cout << "The values in the queue were: ";

while (!iQueue.isEmpty())

{

int value;

iQueue.dequeue(value);

cout << value ;

}

cout<<endl;

system("pause");

return 0;

}