#include <stdio.h> #define SIZE 3 int queue[SIZE]; int front = -1, rear = -1; void enqueue(int value) { if ((rear + 1) % SIZE == front) { printf("Queue is full\n"); return; } if (front == -1) front = 0; rear = (rear + 1) % SIZE; queue[rear] = value; } void printQueue() { if (front == -1) { printf("Queue is empty\n"); return; } int i = front; while (1) { printf("%d ", queue[i]); if (i == rear) break; i = (i + 1) % SIZE; } printf("\n"); } int main() { enqueue(10); enqueue(20); printQueue(); return 0; }
The queue starts empty with front and rear at -1. After enqueue(10), front and rear become 0, queue[0] = 10. After enqueue(20), rear moves to 1, queue[1] = 20. Printing from front to rear outputs '10 20'.
#include <stdio.h> #define MAX 4 int queue[MAX]; int front = -1, rear = -1; void enqueue(int val) { if (rear == MAX - 1) { printf("Queue is full\n"); return; } if (front == -1) front = 0; rear++; queue[rear] = val; } void printQueue() { if (front == -1) { printf("Queue is empty\n"); return; } for (int i = front; i <= rear; i++) { printf("%d ", queue[i]); } printf("\n"); } int main() { enqueue(5); enqueue(15); enqueue(25); printQueue(); return 0; }
Initially front and rear are -1. After enqueue(5), front=0, rear=0, queue[0]=5. Then enqueue(15) sets rear=1, queue[1]=15. Then enqueue(25) sets rear=2, queue[2]=25. Printing from front to rear prints '5 15 25'.
#define SIZE 3 int queue[SIZE]; int front = -1, rear = -1; void enqueue(int val) { if (rear == SIZE) { printf("Queue is full\n"); return; } if (front == -1) front = 0; rear++; queue[rear] = val; }
The condition 'rear == SIZE' allows rear to become SIZE, which is out of array bounds (0 to SIZE-1). This causes an array index out of bounds error when queue[rear] is accessed.
#include <stdio.h> #define SIZE 4 int queue[SIZE]; int front = -1, rear = -1; void enqueue(int val) { if ((rear + 1) % SIZE == front) { printf("Queue is full\n"); return; } if (front == -1) front = 0; rear = (rear + 1) % SIZE; queue[rear] = val; } void dequeue() { if (front == -1) { printf("Queue is empty\n"); return; } if (front == rear) { front = rear = -1; } else { front = (front + 1) % SIZE; } } void printQueue() { if (front == -1) { printf("Queue is empty\n"); return; } int i = front; while (1) { printf("%d ", queue[i]); if (i == rear) break; i = (i + 1) % SIZE; } printf("\n"); } int main() { enqueue(1); enqueue(2); enqueue(3); dequeue(); enqueue(4); printQueue(); return 0; }
Initially enqueue 1,2,3 fills queue at indices 0,1,2. Dequeue moves front from 0 to 1. Enqueue 4 moves rear from 2 to 3. Printing from front=1 to rear=3 outputs '2 3 4'.
In a circular queue, one slot is kept empty to differentiate between full and empty states. So, maximum elements stored is N - 1.
