#include <iostream>
#include <cstdlib>
usingnamespace std;
template<class T>
class Queue
{
private:
int front; //front position
int rear; //rear position
int maxQue; //maximum number of elements in the queue
T* items; //points to a dynamically-allocated array code here
public:
Queue() // default constructor: Queue is created and empty
{
front = -1;
rear = 0;
maxQue = 10;
items = new T[maxQue];
}
void Print() // print the value of all elements in the queue
{
while(front != rear)
{
cout<<items[front];
front++;
if(front==rear)
break;
cout<<" - ";
}
cout<<endl;
}
void Enqueue(T add) // insert x to the rear of the queue
{ // Precondition: the queue is not full
if(IsFull())
{
cout<<"Queue is full!"<<endl;
}
else
{
items[rear] = add;
rear++;
rear = rear % maxQue;
}
}
void Dequeue(T &x) // delete the element from the front of the queue
{ // Precondition: the queue is not empty
if(!IsEmpty())
{
front = (front+1)%maxQue;
x = items[front];
}
}
bool IsEmpty() // test if the queue is empty
{
return (rear==front);
}
bool IsFull() // test if the queue is full
{
return ((rear+1)%maxQue==front);
}
int length() // return the number of elements in the queue
{
return abs(rear-front);
}
~Queue() // Destructor: memory for the dynamic array needs to be deallocated
{
delete [] items;
}
};
Your Queue class doesn't have a MakeEmpty member function so the code shouldn't even compile.
Shouldn't you set both front and rear to 0 in the constructor? Setting front to -1 could probably give various kind of bugs.
Inside the Print() function you have forgot to use % when incrementing front so if front > rear you are running outside the array until the program crashes. Also note that the Print removes all the elements in the queue because it actually changes front to equal rear.