typedef struct {
int arr[5];
int front;
int rear;
} Queue;
void enqueue(Queue *q, int val) {
if (q->rear == 4) return; // queue full
q->rear++;
q->arr[q->rear] = val;
}
int dequeue(Queue *q) {
if (q->front > q->rear) return -1; // queue empty
int val = q->arr[q->front];
q->front++;
return val;
}
int main() {
Queue q = {.front = 0, .rear = -1};
enqueue(&q, 10);
enqueue(&q, 20);
enqueue(&q, 30);
dequeue(&q);
enqueue(&q, 40);
// Print queue from front to rear
for (int i = q.front; i <= q.rear; i++) {
printf("%d -> ", q.arr[i]);
}
printf("null\n");
return 0;
}Initially, queue is empty with front=0 and rear=-1.
Enqueue 10, 20, 30 adds them at rear positions 0,1,2.
Dequeue removes 10 and moves front to 1.
Enqueue 40 adds at rear=3.
So queue elements from front=1 to rear=3 are 20, 30, 40.
In a simple queue using array, rear starts at -1 and moves forward with each enqueue.
When rear reaches size-1 (4 for size 5), the array is full.
Other conditions do not correctly represent full queue.
int dequeue(Queue *q) { if (q->front == q->rear) { return -1; // queue empty } int val = q->arr[q->front]; q->front++; return val; }
If rear starts at -1 and front at 0, then front == rear is false initially.
So empty check fails and dequeue accesses invalid index.
typedef struct {
int arr[4];
int front;
int rear;
} Queue;
void enqueue(Queue *q, int val) {
if (q->rear == 3) return;
q->rear++;
q->arr[q->rear] = val;
}
int dequeue(Queue *q) {
if (q->front > q->rear) return -1;
int val = q->arr[q->front];
q->front++;
return val;
}
int main() {
Queue q = {.front = 0, .rear = -1};
enqueue(&q, 5);
enqueue(&q, 10);
enqueue(&q, 15);
dequeue(&q);
dequeue(&q);
enqueue(&q, 20);
enqueue(&q, 25);
// Print queue
for (int i = q.front; i <= q.rear; i++) {
printf("%d -> ", q.arr[i]);
}
printf("null\n");
return 0;
}Enqueue 5,10,15 fills positions 0,1,2.
Dequeue twice moves front from 0 to 2, removing 5 and 10.
Enqueue 20,25 adds at rear 3 and 4 but array size is 4, so last enqueue ignored.
Queue elements from front=2 to rear=3 are 15 and 20.
But rear max is 3, so 25 enqueue ignored.
In simple array queue, rear moves forward and never wraps around.
After some dequeues, front moves forward but rear stays at end, so no space to enqueue.
Circular queue wraps rear to start to reuse space.
