You are on page 1of 9

Data Structure and Algorithm

Contents
What is Circular Queue?
1. Circular queue is a linear data structure in which data is added in Rear
end and removed from Front end.
2. The first element that is inserted into the queue, is the first element to be
removed. i.e., First In First Out (FIFO).
3. The last node is connected back to the first node.

10 20 30 40 50
0 1 2 3 4 5 6 7

Front Rear
Insertion Operation on Circular Queue
void insert() Size of the array named „cqueue‟ is MAX
{ int element; And declare front=-1, rear=-1 globally.
if((front == 0 && rear == MAX-1) || (front == rear+1))
printf("Queue Overflow n");
else
{printf (“Enter the element”);
scanf (“%d”, &element);
if(front == -1)
{front = 0;
rear = 0; } 8 Delete, front=1, rear=4 9 Delete, front=2, rear=4
else
{if(rear == MAX-1) 10 15 20 25 15 20 25
rear = 0;
else Insert 11, front=2, rear=0 Insert 22, front=2, rear=1
rear = rear+1; } 11 15 20 25 11 22 15 20 25
cqueue[rear] = element ;
} Overflow
}
11 22 15 20 25
Delete Operation on Circular Queue
void deletion()
{ Empty, front=-1, rear=-1
if(front == -1)
printf("Queue Underflow");
else
Delete 10, front=2, rear=4
{
printf("Element deleted from queue is :%d",cqueue[front]); 10 15 20 25
if(front == rear)
{front = -1; Delete 15, front=3, rear=4
rear=-1; } 15 20 25
else
{if(front == MAX-1)
front = 0; Delete 25, front=0, rear=1 Delete 11, front=1, rear=1
else 11 22 25 11 22
front = front+1;
}
} Delete 22, front=-1, rear=-1
}
22
Display the elements of circular Queue
void display()
{ int i, j;
if(front == -1) front<=rear, front=0, rear=-3
printf("Queue is empty"); 5 10 15 20
else
{
printf("Queue elements :n"); front>rear, front=3, rear=1
if( front<= rear)
{for(i=front; i<=rear; i++) 11 22 20 25
printf("%d ",cqueue[i]);}
else
{for(i=front; i<=MAX-1; i++)
printf("%d ",cqueue[i]);
for(j=0; j<=front; j++)
printf("%d ",cqueue_arr[j]);
}
}
}
Insertion in Circular Queue using Linked List
void insert(int info)
{
struct node *newNode;
newNode=malloc(sizeof(struct node));
newNode->data = info;
newNode->next = NULL;
if(front == NULL && rear == NULL)
front = rear = newNode;
else
{
rear->next = newNode;
rear = newNode;
}
rear->next= front; // rear will always point to front
}
Deletion from queue using Linked List
void del()
{
struct node *temp;
if(front == NULL)
printf(“Circular Queue is Empty");
else
{printf(“Deleted element is %d”, front->info)
if(front==rear) //Only one element is in the list
{ front=NULL;
rear=NULL;
free(front);
}
temp = front;
front = front->next;
rear->next = front;
free(temp);
}
}
Question?
Write at :trishita.ghosh@gnit.ac.in

You might also like