You are on page 1of 3

Assignment 6 Solution

Code:

Double Circular Queue . h

#pragma once
#include "Node.h"
typedef int itemType;
class Queue
{
Node* head;
public:
Queue();
bool isEmpty();
Node* newNode(itemType data);
void enQueue(itemType data);
void deQueue();
void display();
};

Double Circular .cpp


#include "DoubleCircularQueue.h"
Queue::Queue()
{
head = NULL;
}
bool Queue::isEmpty()
{
if (head == NULL)
return true;
else
return false;
}
Node* Queue::newNode(itemType data)
{
Node* n = new Node;
n->data = data;
return n;
}
void Queue::enQueue(itemType data)
{
Node* n = newNode(data), * ptr = head;
if (isEmpty())
{
head = n;
n->next = head;
n->prev = head;
}
else
{
while (ptr->next != head)
{
ptr = ptr->next;
}
n->next = ptr->next;
ptr->next = n;
head->prev = n;
n->prev = ptr;
}
}
void Queue::display()
{
int count = 0;
Node* ptr, *ptr1;
ptr = ptr1 = head;
if (!isEmpty())
{
do
{
ptr1 = ptr1->next;
count++;
} while (ptr1 != head);
if (count % 2 == 0)
{
count = count / 2;
}
else
{
count = ((count - 1) / 2);
}
int counter = 0;
while (counter < count)
{
ptr = ptr->next;
counter++;
}
Node* temp = ptr;
do
{
cout << temp->data << " ";
temp = temp->next;
} while (temp != ptr);
cout << endl;
}

}
void Queue::deQueue()
{
Node* ptr = head, * temp = NULL;
if (isEmpty())
cerr << "Queue is Empty\n";
else if (head->next == head)
{
temp = head;
head = NULL;
delete temp;
return;
}
else
{
while (ptr->next != head)
ptr = ptr->next;
temp = head;
head = temp->next;
ptr->next = head;
head->prev = ptr;
delete temp;
return;
}
}
Main .cpp
#include "DoubleCircularQueue.h"
int main()
{
Queue q;
q.enQueue(1);
q.enQueue(2);
q.enQueue(3);
q.enQueue(4);
q.enQueue(5);
q.enQueue(6);
q.enQueue(7);
q.enQueue(8);
q.enQueue(9);
q.enQueue(10);
q.enQueue(11);
q.display();
}

Output:

You might also like