#include #include #define MAX 5 int queue[MAX]; int front = -1; int rear = -1; // Different from normal queue: Need to check if (rear+1)%MAX == front for full condition int isFull() { if((rear + 1) % MAX == front) return 1; return 0; } // Different from normal queue: Both front and rear can wrap around to 0 int isEmpty() { if(front == -1) return 1; return 0; } void enqueue() { int item; if(isFull()) { printf("\nQueue is Full!!"); } else { printf("\nEnter element to insert: "); scanf("%d", &item); // Different from normal queue: rear wraps around using modulo if(front == -1) { front = rear = 0; } else { rear = (rear + 1) % MAX; } queue[rear] = item; printf("\nElement inserted successfully!"); } } void dequeue() { if(isEmpty()) { printf("\nQueue is Empty!!"); } else { printf("\nDeleted element is: %d", queue[front]); // Different from normal queue: front wraps around using modulo if(front == rear) { front = rear = -1; } else { front = (front + 1) % MAX; } } } void display() { int i; if(isEmpty()) { printf("\nQueue is Empty!!"); } else { printf("\nQueue elements are: "); // Different from normal queue: Need to use modulo to wrap around while displaying for(i = front; i != rear; i = (i + 1) % MAX) { printf("%d ", queue[i]); } printf("%d", queue[i]); } } int main() { int choice; while(1) { printf("\n\n1. Insert"); printf("\n2. Delete"); printf("\n3. Display"); printf("\n4. Exit"); printf("\nEnter your choice: "); scanf("%d", &choice); switch(choice) { case 1: enqueue(); break; case 2: dequeue(); break; case 3: display(); break; case 4: exit(0); default: printf("\nInvalid choice!!"); } } return 0; }