Double Ended Queue

Implementation of double ended queue using linked list

Inserting from Front :

void frontEnqueue(int data) {

    // Creating a 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;
        newNode -> next = NULL;
    }
    
    else {
        // Make newNode as front node
        newNode -> next = front;
        front = newNode;
    }

}

Inserting from Rear :

void rearEnqueue(int data) {

    // Creating a queue node
    struct Node *newNode;
    newNode = (struct node *)malloc(sizeof(struct Node));
    newNode -> data = data;
    newNode -> next = NULL;
            
    // If this node is the first node to be inserted
    if (front == NULL) {
        front = rear = newNode;
    }
    
    else {
        rear -> next = newNode;
        newNode -> next = NULL
        rear = newNode;
    }

}

Deleting from Front :

int frontDequeue() {

    // If queue is empty
    if (front == NULL) {
        printf("Queue is empty\n");
        return -1;
    }
    
    else {
        // Pointer for node and data to be deleted
        struct node *toDelete = front;
        int deletedData = front -> data;
        front = front -> next;
        free(toDelete);
    }

}

Deleting from Rear :

int rearDequeue() {

    // If queue is empty
    if (front == NULL) {
        printf("Queue is empty\n");
        return -1;
    }
    
    else {
        // Reach rear node
        struct node *ptr = front;
        while (ptr -> next != rear) {
            ptr = ptr -> next;
        }
        // Delete rear node 
        struct node *toDelete = rear;
        int deletedData = rear -> data;
        free(rear);
        // Make previous node as rear
        rear = ptr;
        rear -> next = NULL;
    }

}

Contributed by Nitin Ranganath

Last updated