#include <stdio.h>
#include <stdlib.h>
#define MAX 5
typedef struct {
int items[MAX];
int front, rear;
} Queue;
void initQueue(Queue *q) {
q->front = -1;
q->rear = -1;
}
int isEmpty(Queue *q) {
return q->front == -1;
}
int isFull(Queue *q) {
return q->rear == MAX - 1;
}
void enqueue(Queue *q, int value) {
if (isFull(q)) {
printf("Queue is full\n");
return;
}
if (isEmpty(q)) {
q->front = 0;
}
q->rear++;
q->items[q->rear] = value;
}
int dequeue(Queue *q) {
if (isEmpty(q)) {
printf("Queue is empty\n");
return -1;
}
int item = q->items[q->front];
if (q->front == q->rear) {
q->front = -1;
q->rear = -1;
} else {
q->front++;
}
return item;
}
void printQueue(Queue *q) {
if (isEmpty(q)) {
printf("Queue is empty\n");
return;
}
printf("front -> ");
for (int i = q->front; i <= q->rear; i++) {
printf("[%d] -> ", q->items[i]);
}
printf("rear\n");
}
int main() {
Queue q;
initQueue(&q);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
printQueue(&q);
int removed = dequeue(&q);
printf("Dequeued: %d\n", removed);
printQueue(&q);
return 0;
}
if (isEmpty(q)) { q->front = 0; }
set front to 0 when first element is enqueued
q->rear++; q->items[q->rear] = value;
add new element at rear and move rear pointer
int item = q->items[q->front];
store front element to return it
if (q->front == q->rear) { q->front = -1; q->rear = -1; } else { q->front++; }
move front pointer forward or reset if queue becomes empty
front -> [1] -> [2] -> [3] -> rear
Dequeued: 1
front -> [2] -> [3] -> rear