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

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