Write a program that
Deletes duplicate elements from circular queue.
Requirements :
No global decelerations
Run test in main
#include <iostream>
using namespace std;
class Queue
{
int rear, front;
int size;
int* arr;
public:
Queue(int s)
{
front = rear = -1;
size = s;
arr = new int[s];
}
void enQueue(int value);
int deQueue();
void displayQueue();
void delete_dublicates();
};
void Queue::delete_dublicates()
{
int* tmp;
for (int i = 0; i < size-1; i++)
{
for (int j = i+1; j < size; j++)
{
if (arr[i] == arr[j])
{
tmp = new int[size - 1];
int count = 0;
for (int z = 0; z < size; z++)
{
if (z == j)
{
count++;
continue;
}
tmp[z - count] = arr[z];
}
delete[]arr;
arr = tmp;
size--;
rear = size-1;
front = 0;
}
}
}
}
void Queue::enQueue(int value)
{
if ((front == 0 && rear == size - 1) ||
(rear == (front - 1) % (size - 1)))
{
printf("\nQueue is Full");
return;
}
else if (front == -1)
{
front = rear = 0;
arr[rear] = value;
}
else if (rear == size - 1 && front != 0)
{
rear = 0;
arr[rear] = value;
}
else
{
rear++;
arr[rear] = value;
}
}
int Queue::deQueue()
{
if (front == -1)
{
printf("\nQueue is Empty");
return INT_MIN;
}
int data = arr[front];
arr[front] = -1;
if (front == rear)
{
front = -1;
rear = -1;
}
else if (front == size - 1)
front = 0;
else
front++;
return data;
}
void Queue::displayQueue()
{
std::cout << "\nsize : " << size<<"\t";
if (front == -1)
{
printf("\nQueue is Empty");
return;
}
printf("\nElements in Circular Queue are: ");
if (rear >= front)
{
for (int i = front; i <= rear; i++)
printf("%d ", arr[i]);
}
else
{
for (int i = front; i < size; i++)
printf("%d ", arr[i]);
for (int i = 0; i <= rear; i++)
printf("%d ", arr[i]);
}
}
int main()
{
Queue q(10);
q.enQueue(14);
q.enQueue(22);
q.enQueue(22);
q.enQueue(-6);
q.enQueue(14);
q.enQueue(-6);
q.enQueue(14);
q.enQueue(18);
q.enQueue(44);
q.enQueue(13);
q.displayQueue();
q.delete_dublicates();
q.displayQueue();
system("pause");
return 0;
}
Comments
Leave a comment