Doubly linked list Insertion in C: C program to create, insert, delete, search, delete display in doubly linked list

Doubly linked list Insertion in C: C program to create, insert, delete, search, delete display in doubly linked list

#include <stdio.h>

  #include <stdlib.h>


  struct node {

        int data;

        struct node *next, *prev;

  };


  struct node *head = NULL, *tail = NULL;

  int nodeCount = 0;


  struct node * createNode(int data) {

        struct node *newnode;

        newnode = (struct node *)malloc(sizeof (struct node));

        newnode->data = data;

        newnode->next = NULL;

        newnode->prev = NULL;

        return (newnode);

  }


  void createDummies() {

        head = (struct node *)malloc(sizeof (struct node));

        tail = (struct node *)malloc(sizeof (struct node));

        head->data = tail->data = 0;

        head->next = tail;

        tail->prev = head;

        head->prev = tail->next = NULL;

  }


  void insert(int data, int pos) {

        struct node *newnode, *temp1;

        int count = 1;

        newnode = createNode(data);

        temp1 =  head;

        while (temp1) {

                if (count == pos) {

                        newnode->next = temp1->next;

                        newnode->prev = temp1;

                        temp1->next->prev = newnode;

                        temp1->next = newnode;

                        nodeCount++;

                        break;

                }

                temp1 = temp1->next;

                count++;

        }

        return;

  }


  void insertAtStart(int data) {

        struct node *newnode = createNode(data);

        newnode->next = head->next;

        newnode->prev = head;

        head->next->prev = newnode;

        head->next = newnode;

        nodeCount++;

  }


  void insertAtEnd(int data) {

        struct node *newnode = createNode(data);

        newnode->next = tail;

        newnode->prev = tail->prev;

        tail->prev->next = newnode;

        tail->prev = newnode;

        nodeCount++;

  }


  void delete(int data) {

        struct node *temp1, *temp2;

        temp1 = head->next;

        while (temp1 != tail) {

                if (temp1->data == data) {

                        temp2 = temp1;

                        temp1->prev->next = temp1->next;

                        temp1->next->prev = temp1->prev;

                        free(temp2);

                        nodeCount--;

                        return;

                }

                temp1 = temp1->next;

        }

        printf("Given node is not present in the List\n");

        return;

  }


  void deleteList() {

        struct node *temp2, *temp1 = head->next;

        while (temp1 != tail) {

                temp1->prev->next = temp1->next;

                temp1->next->prev = temp1->prev;

                temp2 = temp1;

                free(temp1);

                temp1 = temp2->next;

        }

        nodeCount = 0;

        return;

  }


  void searchNode(int data) {

        struct node *temp = head->next;

        while (temp != tail) {

                if (temp->data == data) {

                        printf("Given node is present\n");

                        return;

                }

                temp = temp->next;

        }

        printf("Given node is not present in the list\n");

        return;

  }


  void walkList() {

        struct node *ptr = head->next;

        int flag = 1, i = 1;

        if (head->next == tail) {

                printf("List is Empty\n");

                return;

        }

        printf("Data in List:\n");

        while (ptr != tail) {

                if (ptr->prev != head) {

                       // printf("           /\\ \n");

                       // printf("           ||\n");

                        flag = 0;

                }

                //printf("+------------------------+\n");

                //printf("|node%2d addr:0x%08x  |\n", i, (unsigned int)ptr);

                //printf("+------------------------+\n");

                printf("|data: %4d              |\n", ptr->data);

                //printf("-------------------------+\n");

                //printf("|prev: 0x%08x        |\n",            ptr->prev == head ? 0 : (unsigned int)ptr->prev);

                printf("+------------------------+\n");

                //printf("|next: 0x%08x        |\n",           ptr->next == tail ? 0 : (unsigned int)ptr->next);

                //printf("+------------------------+\n");

                ptr = ptr->next;


                if (ptr != tail) {

                        //printf("    ||      \n");

                       // printf("    \\/     \n");

                }

                i++;

        }

  }


  int main() {

        int data, ch, pos;

        createDummies();

        while (1) {

                printf("1. Insert\n2. Delete\n");

                printf("3. Display List\n4. Search Node\n");

                printf("5. Delete List\n6. Insert At start\n");

                printf("7. Insert at End\n8. Exit\n");

                printf("Enter your choice:");

                scanf("%d", &ch);

                switch (ch) {

                        case 1:

                                printf("Enter the node position(1 - %d)", nodeCount+1);

                                scanf("%d", &pos);

                                if (pos <= 0 || pos > nodeCount+1) {

                                        printf("Please enter correct position\n");

                                } else {

                                        printf("Enter ur data to insert:");

                                        scanf("%d", &data);

                                        insert(data, pos);

                                }

                                break;

                        case 2:

                                printf("Enter the data to delete:");

                                scanf("%d", &data);

                                delete(data);

                                break;

                        case 3:

                                walkList();

                                break;

                        case 4:

                                printf("Enter the data to be searched:");

                                scanf("%d", &data);

                                searchNode(data);

                                break;

                        case 5:

                                deleteList();

                                break;

                        case 6:

                                printf("Enter ur data to  insert at start:");

                                scanf("%d", &data);

                                insertAtStart(data);

                                break;

                        case 7:

                                printf("Enter ur data to insert:");

                                scanf("%d", &data);

                                insertAtEnd(data);

                                break;

                        case 8:

                                exit(0);

                        default:

                                printf("U have entered wrong option\n");

                                break;

                }

        }

        return 0;

  }


Comments

Popular posts from this blog

How to make WiFi hotspot in windows 10 using Mobile hotspot Creation tool || Make WIFI Hotspot

Binary Search Tree: C Program to implement a Binary Search Tree and perform deletion, inorder traversal on it