A circular queue in C stores the data in a very practical manner. It is a linear data structure. It is very similar to the queue. The only difference is that the last node is connected back to the first node. Thus it is called a circular queue. This article will help you explore this concept in detail.
Following pointers will be covered in this article,
Circular Queue In C
A circular queue solved the limitations of the normal queue. Thus making it a better pick than the normal queue. It also follows the first come first serve algorithm. Circular Queue is also called ring Buffer.
Operations On A Circular Queue
- Enqueue- adding an element in the queue if there is space in the queue.
- Dequeue- Removing elements from a queue if there are any elements in the queue
- Front- get the first item from the queue.
- Rear- get the last item from the queue.
- isEmpty/isFull- checks if the queue is empty or full.
Applications Of A Circular Queue
- Memory management: circular queue is used in memory management.
- Process Scheduling: A CPU uses a queue to schedule processes.
- Traffic Systems: Queues are also used in traffic systems.
Sample Code
#include<stdio.h> # define MAX 5 int cqueue_arr[MAX]; int front = -1; int rear = -1; void insert(int item) { if((front == 0 && rear == MAX-1) || (front == rear+1)) { printf("Queue Overflow n"); return; } if(front == -1) { front = 0; rear = 0; } else { if(rear == MAX-1) rear = 0; else rear = rear+1; } cqueue_arr[rear] = item ; } void deletion() { if(front == -1) { printf("Queue Underflown"); return ; } printf("Element deleted from queue is : %dn",cqueue_arr[front]); if(front == rear) { front = -1; rear=-1; } else { if(front == MAX-1) front = 0; else front = front+1; } } void display() { int front_pos = front,rear_pos = rear; if(front == -1) { printf("Queue is emptyn"); return; } printf("Queue elements :n"); if( front_pos <= rear_pos ) while(front_pos <= rear_pos) { printf("%d ",cqueue_arr[front_pos]); front_pos++; } else { while(front_pos <= MAX-1) { printf("%d ",cqueue_arr[front_pos]) front_pos++; } front_pos = 0; while(front_pos <= rear_pos) { printf("%d ",cqueue_arr[front_pos]); front_pos++; } } printf("n"); } int main() { int choice,item; do { printf("1.Insertn"); printf("2.Deleten"); printf("3.Displayn"); printf("4.Quitn"); printf("Enter your choice : "); scanf("%d",&choice); switch(choice) { case 1 : printf("Input the element for insertion in queue : "); scanf("%d", &item); insert(item); break; case 2 : deletion(); break; case 3: display(); break; case 4: break; default: printf("Wrong choicen"); } }while(choice!=4); return 0; }
Output:
Explanation
This code is a menu-driven implementation of a circular queue. First, define the size of MAX variable to be 5. Then, the array called cqueue_array is declared of size MAX. Three functions are to be declared. The functions are insert, display and delete functions. There is a menu-driven main function. The user is asked to enter his choice and call the appropriate function to perform the task.
There are 2 pointers, the front is at the front of the queue and rear is at the back of the queue. In a circular queue, the elements are added from the back of the queue and remove them from the front of the queue. This is the circular queue so if the rear is at the last location, if incremented it will be pointing to the first element
Moving on with this article on Circular Queue In C
Insert Function
void insert(int item) { if((front == 0 && rear == MAX-1) || (front == rear+1)) { printf("Queue Overflow n"); return; } if(front == -1) { front = 0; rear = 0; } else { if(rear == MAX-1) rear = 0; else rear = rear+1; } cqueue_arr[rear] = item ; }
In the insertion part, check if the circular queue is full, if yes give the overflow message or else check if the circular queue is empty. If rear is at the last location it is made to point to the first or else Rear is incremented by one. This is how it becomes a circular queue. At the end the item is entered into the queue.
Moving on with this article on Circular Queue In C
Delete Function
void deletion() { if(front == -1) { printf("Queue Underflown"); return; } printf("Element deleted from queue is : %dn",cqueue_arr[front]); if(front == rear) { front = -1; rear=-1; } else { if(front == MAX-1) front = 0; else front = front+1; } }
In the delete part, it is first checked if the circular queue is empty. If yes, print underflow error, that is queue is empty. Otherwise print the first element, that is the element that will be deleted and increment front. This is how deletion takes place.
Then, check if front and rear are pointing at the same location and assign both values to -1, that is not pointing anywhere. Otherwise, check if the front is at the end, if yes, make it point to the first location. Else, increment front.
Moving on with this article on Circular Queue In C
Display Function
void display() { int front_pos = front,rear_pos = rear; if(front == -1) { printf("Queue is emptyn"); return; } printf("Queue elements :n"); if( front_pos <= rear_pos ) while(front_pos <= rear_pos) { printf("%d ",cqueue_arr[front_pos]); front_pos++; } else { while(front_pos <= MAX-1) { printf("%d ",cqueue_arr[front_pos]); front_pos++; } front_pos = 0; while(front_pos <= rear_pos) { printf("%d ",cqueue_arr[front_pos]); front_pos++; } } printf("n"); }
We just display the circular queue like how an array is displayed. Check if the circular queue is empty here as well. Then, print the elements of the circular queue according to the position of the variables front and rear.
This brings us to the end of this article on Circular Queue In C.
With this we come to the end of this article on ‘Queue In C’. I hope you found this informative and helpful, stay tuned for more tutorials on similar topics.You may also checkout our training program to get in-depth knowledge on jQuery along with its various applications, you can enroll here for live online training with 24/7 support and lifetime access.Implement the above code with different strings and modifications. Now, we have a good understanding of all key concepts related to the pointer.
Got a question for us? Mention them in the comments section of this article and we will get back to you.