A circular queue is a linear data structure that follows the First In First Out (FIFO) principle but unlike a traditional queue, the last position is connected back to the first position to make a circle. It is very useful for managing resources in computing environments where the system needs to run continuously.
Program Code
#include <iostream>
using namespace std;
class CircularQueue {
private:
int front, rear, size;
int *queue;
public:
CircularQueue(int size) {
this->size = size;
queue = new int[size];
front = rear = -1;
}
~CircularQueue() {
delete[] queue;
}
// Function to insert an element at the rear of the queue
void enqueue(int value) {
if ((front == 0 && rear == size - 1) || (rear == (front - 1) % (size - 1))) {
cout << "Queue is Full\n";
} else if (front == -1) { // Insert First Element
front = rear = 0;
queue[rear] = value;
} else if (rear == size - 1 && front != 0) {
rear = 0;
queue[rear] = value;
} else {
rear++;
queue[rear] = value;
}
}
// Function to delete an element from the front of the queue
void dequeue() {
if (front == -1) {
cout << "Queue is Empty\n";
} else if (front == rear) {
cout << "Element " << queue[front] << " is removed\n";
front = rear = -1;
} else if (front == size - 1) {
cout << "Element " << queue[front] << " is removed\n";
front = 0;
} else {
cout << "Element " << queue[front] << " is removed\n";
front++;
}
}
// Function to display the elements of the queue
void displayQueue() {
if (front == -1) {
cout << "Queue is Empty\n";
return;
}
cout << "Elements in the Circular Queue are: ";
if (rear >= front) {
for (int i = front; i <= rear; i++)
cout << queue[i] << " ";
} else {
for (int i = front; i < size; i++)
cout << queue[i] << " ";
for (int i = 0; i <= rear; i++)
cout << queue[i] << " ";
}
cout << endl;
}
};
int main() {
CircularQueue q(5);
// Enqueue elements
q.enqueue(14);
q.enqueue(22);
q.enqueue(13);
q.enqueue(-6);
q.enqueue(25);
q.displayQueue();
q.dequeue();
q.displayQueue();
q.enqueue(23);
q.displayQueue();
return 0;
}
Class and Function Documentation
- Constructor CircularQueue(int size): Initializes the queue of given maximum size.
- void enqueue(int value): Adds a value to the rear of the queue. If the queue is full, it will output “Queue is Full”.
- void dequeue(): Removes the front item of the queue and prints it. If the queue is empty, it will output “Queue is Empty”.
- void displayQueue(): Prints all elements in the queue from front to rear. This method demonstrates the circular nature of the queue if it wraps around.
Example Usage
CircularQueue q(5);
q.enqueue(14);
q.enqueue(22);
q.enqueue(13);
q.dequeue();
q.displayQueue(); // Output will show remaining elements in the queue

