Queue using Linked List

Implementation of queue using a linked list.

Queue Node Structure :

struct Node {
    int data;
    struct Node *next;
};

struct Node *front = NULL;
struct Node *rear = NULL;

Enqueue Operation :

void enqueue(int data) {

    // Creating a new queue node
    struct Node *newNode;
    newNode = (struct Node *)malloc(sizeof(struct Node));
    newNode -> data = data;

    // If this node is the first node to be inserted
    if (front == NULL) {
        front = rear = newNode;
    }

    // If other nodes are already present
    else {
        rear -> next = newNode;
        rear = newNode;
    }
    
}

Dequeue Operation :

int dequeue() {

    // If queue is already empty
    if (front == NULL) {
        printf("Queue underflow\n");
        return -1;
    }

    else {
        // Pointers for node & data to be deleted
        struct Node *toDelete = front;
        int deletedData = front -> data;

        front = front -> next;
        free(toDelete);
        return deletedData;
    }
    
}

Display Operation :

void display() {

    // If queue is empty
    if (front == NULL) {
        printf("Queue is empty\n");
        return;
    }

    struct Node *ptr = front;
    while (ptr != NULL) {
        printf("%d\t", ptr -> data);
        ptr = ptr -> next;
    }
    printf("\n");
    
}

Contributed by Nitin Ranganath

Last updated