Mental Model
Add a new item to the end of a line by linking it to the last item.
Analogy: Imagine people standing in a queue; when a new person arrives, they join at the back, holding the hand of the last person.
front -> 1 -> 2 -> 3 -> null rear ↑
front -> 1 -> 2 -> 3 -> null rear ↑
new_node: 4 -> null
front -> 1 -> 2 -> 3 -> [rear->4] -> null
front -> 1 -> 2 -> 3 -> 4 -> null rear ↑
front -> 1 -> 2 -> 3 -> 4 -> null rear ↑
#include <stdio.h> #include <stdlib.h> // Node structure typedef struct Node { int data; struct Node* next; } Node; // Queue structure with front and rear pointers typedef struct Queue { Node* front; Node* rear; } Queue; // Create a new node with given value Node* createNode(int value) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = value; newNode->next = NULL; return newNode; } // Initialize an empty queue Queue* createQueue() { Queue* q = (Queue*)malloc(sizeof(Queue)); q->front = NULL; q->rear = NULL; return q; } // Enqueue operation: add value at the rear void enqueue(Queue* q, int value) { Node* newNode = createNode(value); // create new node if (q->rear == NULL) { // queue empty q->front = newNode; // front and rear both point to new node q->rear = newNode; return; } q->rear->next = newNode; // link last node to new node q->rear = newNode; // update rear to new node } // Print queue from front to rear void printQueue(Queue* q) { Node* temp = q->front; while (temp != NULL) { printf("%d -> ", temp->data); temp = temp->next; } printf("null\n"); } int main() { Queue* q = createQueue(); enqueue(q, 1); enqueue(q, 2); enqueue(q, 3); printf("Queue before enqueue: "); printQueue(q); enqueue(q, 4); printf("Queue after enqueue 4: "); printQueue(q); return 0; }
Node* newNode = createNode(value); // create new nodeif (q->rear == NULL) { // queue empty
q->front = newNode; // front and rear both point to new node
q->rear = newNode;
return;
}q->rear->next = newNode; // link last node to new nodeq->rear = newNode; // update rear to new nodeif (q->rear == NULL) { // queue empty