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;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.