Circular queue.ds
#include <stdio.h>
#define N 5
int queue[N];
int front = -1;
int rear = -1;
void enque(int x) {
if(front == -1 && rear == -1){
front = rear = 0;
queue[rear] = x;
} else if((rear + 1) % N == front){
printf("Queue is full\n");
} else {
rear = (rear + 1) % N;
queue[rear] = x;
}
}
void deque() {
if(front == -1 && rear == -1) {
printf("Underflow\n");
} else if(front == rear) {
front = rear = -1;
} else {
printf("Dequeued: %d\n", queue[front]);
front = (front + 1) % N;
}
}
void display() {
if(front == -1 && rear == -1) {
printf("Queue is empty\n");
} else {
int i = front;
printf("Queue is: ");
while(i != rear){
printf("%d ", queue[i]);
i = (i + 1) % N;
}
printf("%d\n", queue[rear]);
}
}
int main() {
enque(2);
enque(-1);
enque(5);
enque(6);
enque(7); // Should show "Queue is full" here
display();
deque();
display();
}