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