Data Structure

# Circular Queue

A circular queue is an abstract data type that contains a collection of data which allows addition of data at the end of the queue and removal of data at the beginning of the queue. Circular queues have a fixed size.
Circular queue follows FIFO principle. Queue items are added at the rear end and the items are deleted at front end of the circular queue.

### Algorithm for Insertion in a circular queue

```
Insert CircularQueue ( )

1. If (FRONT == 1 and REAR == N) or (FRONT == REAR + 1) Then

2. 	Print: Overflow

3. Else

4. 	If (REAR == 0) Then [Check if QUEUE is empty]

(a) Set FRONT = 1

(b) Set REAR = 1

5. Else If (REAR == N) Then [If REAR reaches end if QUEUE]

6. 		Set REAR = 1

7. Else

8. 		Set REAR = REAR + 1 [Increment REAR by 1]

[End of Step 4 If]

9. Set QUEUE[REAR] = ITEM

10. Print: ITEM inserted

[End of Step 1 If]

11. Exit

```

### Implementation of insertion in circular queue

```
#include<stdio.h>

#include<string.h>

#include<conio.h>

#include<ctype.h>

#include<stdlib.h>

#define size 8

int rear, front;

int no;

int q[size];

int rear=-1;

int front=-1;

/* Function to create queue */

void Insert_queue()

{

char ans;

printf("\n Enter 'n' for break:-");

ans=getch();

while(ans!='n')

{

printf("\n Input the Element  : ");

scanf("%d",&no);

if((front==0) && (rear==size-1))

{

printf("\n Queue is Overflow");

return;

}

else if(rear==front-1)

{

printf("\n Queue is overflow");

return;

}

else if(front < 0) /* Insert First Element */

{

front=0;

rear=0;

q[rear]=no;

}

else if(rear==size-1)

{

rear=0;

q[rear]=no;

}

else

{

rear++;

if(rear==front)

{

printf("\n Queue is overflow ");

return;

}

else

{

q[rear]=no;

}

}

printf("\n Enter 'n' for break:-");

ans = getch();

}

}

void Display_queue()

{

int i;

if(front < 0)

{

printf("\n Queue is underflow");

return;

}

printf("\nItems are:\n");

if(rear>=front)

{

for(i=front; i<=rear; i++)

{

printf("\n q[%d] = %d",i,q[i]);

}

}

else

{

for(i=front;i < size; i++)

{

printf("\n l-2 q[%d] = %d",i,q[i]);

}

for(i=0;i<=rear;i++)

{

printf("\n l-3 q[%d] = %d",i,q[i]);

}

}

}

/* Function main */

void main()

{

clrscr();

Insert_queue();

Display_queue();

getch();

}

```

### Algorithm for Deletion in a circular queue

```
Delete CircularQueue ( )

1. If (FRONT == 0) Then [Check for Underflow]

2. 	Print: Underflow

3. Else

4. 	ITEM = QUEUE[FRONT]

5. 		If (FRONT == REAR) Then [If only element is left]

(a) Set FRONT = 0

(b) Set REAR = 0

6. Else If (FRONT == N) Then [If FRONT reaches end if QUEUE]

7. 			Set FRONT = 1

8. Else

9. 			Set FRONT = FRONT + 1 [Increment FRONT by 1]

[End of Step 5 If]

10. Print: ITEM deleted

[End of Step 1 If]

11. Exit

```

### C fuction of deletion in circular queue

```
void Delete_queue()

{

if(front < 0)

{

printf("\n Queue is Underflow");

return;

}

no=q[front];

q[front]=NULL;

printf("\n Element deleted : ",no);

if(front==rear)

{

front=-1;

rear=-1;

}

else if(front==size-1)

{

front=0;

}

else

{

front++;

}

}

```

`About Me`