A queue class is first in / first out. It acts as a buffer. If you enqueue 1, 2
ID: 3534030 • Letter: A
Question
A queue class is first in / first out. It acts as a buffer. If you enqueue 1, 2 and 3, then you will dequeue 1, 2, and 3 in the same order.
The queue class should have the following methods:
Here is what your main program should be:
// put your includes, and comments here
void main()
{
Queue<string> stringQueue;
stringQueue.enqueue(string("Hello"));
Queue<int> intQueue;
Queue<double> doubleQueue;
for(int i=2;i<=22;i+=4){
intQueue.enqueue(i);
doubleQueue.enqueue(i+0.5);
}
stringQueue.enqueue(string("World"));
while (!stringQueue.empty())
cout << stringQueue.dequeue() << endl;
while (!intQueue.empty())
cout << intQueue.dequeue() << endl;
while (!doubleQueue.empty())
cout << doubleQueue.dequeue() << endl;
}
Here is the expected output:
Explanation / Answer
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
template <class T>
class Queue
{
class Node
{
public:
T key;
Node * next;
Node() : key(-1),next(NULL)
{}
Node (T data) : key(data),next(NULL)
{}
~Node()
{}
};
Node * front;
Node * back;
public:
Queue()
{
front = NULL;
back = NULL;
}
void enqueue(T data);
T dequeue();
bool empty()
{
return (front==NULL);
}
};
template <class T>
void Queue <T> ::enqueue(T data)
{
//cout << "Inserting "<<data<<endl;
Node * newNode = new Node(data);
if(back==NULL)
{
front = back = newNode;
}
else
{
back->next = newNode;
back = back->next ;
}
}
template <class T>
T Queue <T> ::dequeue()
{
if(front)
{
Node * temp = front;
front = front->next;
T val = temp->key;
delete temp;
return val;
}
}
int main()
{
Queue<string> stringQueue;
stringQueue.enqueue(string("Hello"));
Queue<int> intQueue;
Queue<double> doubleQueue;
for(int i=2;i<=22;i+=4){
intQueue.enqueue(i);
doubleQueue.enqueue(i+0.5);
}
stringQueue.enqueue(string("World"));
while (!stringQueue.empty())
cout << stringQueue.dequeue() << endl;
while (!intQueue.empty())
cout << intQueue.dequeue() << endl;
while (!doubleQueue.empty())
cout << doubleQueue.dequeue() << endl;
}