I\'m trying to convert this QueueClass to work with char\'s, but I cant seem to
ID: 3623795 • Letter: I
Question
I'm trying to convert this QueueClass to work with char's, but I cant seem to get it working using char's...
I.e., I want to be able to queue up things like:
+
4
6
/
9.1
4.5
*
12
#include
#include
using namespace std;
struct node{
int number;
int index;
node *next;
};
node *first = NULL; /* first added */
node *last = NULL; /* last added */
class QueueClass
{
public:
QueueClass(){};
~QueueClass(){ ClearQueue(); };
void ClearQueue();
bool isEmpty();
int DeQueue();
void EnQueue( int );
void PrintQueue();
int PeekQueue();
};
void QueueClass::ClearQueue()
{
while( (first != NULL) && (last != NULL) )
{
DeQueue();
}
}
bool QueueClass::isEmpty()
{
if( (first != NULL) && (last != NULL) )
{
return false;
}
else
{
return true;
}
}
int QueueClass::DeQueue()
{
int value = 0;
value = first->number;
first = first->next;
return value;
}
void QueueClass::PrintQueue()
{
node *temp0;
temp0 = first;
cout << "printing queue: ";
if( temp0 != NULL )
{
int i = 1;
while( temp0 != NULL )
{
cout << temp0->number << " | ";
temp0 = temp0->next;
i++;
}
cout << " ";
}
else
{
cout << "queue is empty" << endl;
}
}
void QueueClass::EnQueue( int numberIn )
{
node *temp0;
temp0 = new node;
temp0->number = numberIn;
temp0->next = NULL;
if( first != NULL )
{
last->next = temp0;
temp0->next = NULL;
last = temp0;
}
else
{
first = temp0;
last = first;
}
}
int QueueClass::PeekQueue()
{
if(!isEmpty())
{
return first->number;
}
else
{
cout << "queue is empty";
}
}
void main()
{
/* test the queueclass function here.. */
system("PAUSE");
}
Explanation / Answer
#include<iostream>
using namespace std;
struct node{
char number;
int index;
node *next;
};
node *first = NULL; /* first added */
node *last = NULL; /* last added */
class QueueClass
{
public:
QueueClass(){};
~QueueClass(){ ClearQueue(); };
void ClearQueue();
bool isEmpty();
char DeQueue();
void EnQueue(char);
void PrintQueue();
char PeekQueue();
};
void QueueClass::ClearQueue()
{
while( (first != NULL) && (last != NULL) )
{
DeQueue();
}
}
bool QueueClass::isEmpty()
{
if( (first != NULL) && (last != NULL) )
{
return false;
}
else
{
return true;
}
}
char QueueClass::DeQueue()
{
char value =' ';
value = first->number;
first = first->next;
return value;
}
void QueueClass::PrintQueue()
{
node *temp0;
temp0 = first;
cout << "printing queue: ";
if( temp0 != NULL )
{
int i = 1;
while( temp0 != NULL )
{
cout << temp0->number << " | ";
temp0 = temp0->next;
i++;
}
cout << " ";
}
else
{
cout << "queue is empty" << endl;
}
}
void QueueClass::EnQueue( char numberIn )
{
node *temp0;
temp0 = new node;
temp0->number = numberIn;
temp0->next = NULL;
if( first != NULL )
{
last->next = temp0;
temp0->next = NULL;
last = temp0;
}
else
{
first = temp0;
last = first;
}
}
char QueueClass::PeekQueue()
{
if(!isEmpty())
{
return first->number;
}
else
{
cout << "queue is empty";
}
}
void main()
{
/* test the queueclass function here.. */
QueueClass que1;
que1.EnQueue('+');
que1.EnQueue('4');
que1.EnQueue('4');
que1.EnQueue('6');
que1.EnQueue('/');
cout<<"Removed:"<<que1.DeQueue()<<endl;
que1.PrintQueue();
system("PAUSE");
#include<iostream>
using namespace std;
template <class T>
class DynIntQueue
{
private:
// Structure for the queue nodes
struct QueueNode
{
T value; // Value in a node
QueueNode *next; // Pointer to the next node
};
QueueNode *front; // The front of the queue
QueueNode *rear; // The rear of the queue
int numItems; // Number of items in the queue
public:
// Constructor
DynIntQueue();
// Destructor
~DynIntQueue();
// Queue operations
void enqueue(T);
void dequeue(T &);
bool isEmpty() const;
bool isFull() const;
void clear();
};
//********************************************
// The constructor creates an empty queue. *
//********************************************
template <class T>
DynIntQueue<T>::DynIntQueue()
{
front = NULL;
rear = NULL;
numItems = 0;
}
//********************************************
// Destructor *
//********************************************
template <class T>
DynIntQueue<T>::~DynIntQueue()
{
clear();
}
//********************************************
// Function enqueue inserts the value in num *
// at the rear of the queue. *
//********************************************
template <class T>
void DynIntQueue<T>::enqueue(T num)
{
QueueNode *newNode;
// Create a new node and store num there.
newNode = new QueueNode;
newNode->value = num;
newNode->next = NULL;
// Adjust front and rear as necessary.
if (isEmpty())
{
front = newNode;
rear = newNode;
}
else
{
rear->next = newNode;
rear = newNode;
}
// Update numItems.
numItems++;
}
Hope this will help you
//**********************************************
// Function dequeue removes the value at the *
// front of the queue, and copies it into num. *
//**********************************************
template <class T>
void DynIntQueue<T>::dequeue(T &num)
{
QueueNode *temp;
if (isEmpty())
{
cout << "The queue is empty. ";
}
else
{
// Save the front node value in num.
num = front->value;
// Remove the front node and delete it.
temp = front;
front = front->next;
delete temp;
// Update numItems.
numItems--;
}
}
//*********************************************
// Function isEmpty returns true if the queue *
// is empty, and false otherwise. *
//*********************************************
template <class T>
bool DynIntQueue<T>::isEmpty() const
{
bool status;
if (numItems > 0)
status = false;
else
status = true;
return status;
}
//********************************************
// Function clear dequeues all the elements *
// in the queue. *
//********************************************
template <class T>
void DynIntQueue<T>::clear()
{
T value; // Dummy variable for dequeue
while(!isEmpty())
dequeue(value);
}
void main()
{
const int MAX_VALUES = 5;
// Create a DynIntQueue object.
DynIntQueue<char> iQueue;
// Enqueue a series of numbers.
cout << "Enqueuing " << MAX_VALUES << " items... ";
iQueue.enqueue('H');
iQueue.enqueue('E');
iQueue.enqueue('L');
iQueue.enqueue('L');
iQueue.enqueue('O');
// Dequeue and retrieve all numbers in the queue
cout << "The values in the queue were: ";
while (!iQueue.isEmpty())
{
char value;
iQueue.dequeue(value);
cout << value << endl;
}
char value;
iQueue.dequeue(value);
//To pause system for a while
system("pause");
}
//end