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
Post a Comment