☰
×
◈ Home
◈ Array
◈ Stack Using Array
◈ Stack Using Linked List
◈ Queue Using Array
◈ Queue Using Linked List
◈ Singly Linked List
◈ Doubly Linked List
◈ Circular Linked List
◈ Trees
◈ Graphs
◈ Hashes
◈ Heaps
Home
About
Consulting
Training
Tutorials
Interview Questions
Contact
C Programs
C Data Structure Programs
Home
C Data Structure Programs
◈ Home
◈ Array
◈ Stack Using Array
◈ Stack Using Linked List
◈ Queue Using Array
◈ Queue Using Linked List
◈ Singly Linked List
◈ Doubly Linked List
◈ Circular Linked List
◈ Trees
◈ Graphs
◈ Hashes
◈ Heaps
C Data Structure Programs
Doubly Linked List
« Prev
Next »
Doubly Linked List - Operation
☛ Insert Data
☛ Delete Data
☛ Insert at Middle
☛ Reverse
☛ Display
Doubly Linked List - Full Operation
#include
#include
#include
struct node { struct node *left; int data; struct node *right; }*root=NULL; struct node *temp,*newn; main() { int val, ch, del,m1,m2; struct node *temp; while(1) { printf("\n\n"); printf(" 1. Insert_end \n"); printf(" 2. Delete \n"); printf(" 3. replace \n"); printf(" 4. Insert_middle\n"); printf(" 5. Reverse \n"); printf(" 6. Display \n"); printf(" 7. exit \n\n"); printf(" Enter your choice : "); scanf("%d", &ch); switch (ch) { case 1: printf("Enter ur data:"); scanf("%d", &val); insert(val); break; case 2: if(root==NULL) { printf("List is empty\n"); break; } else { printf("Enter value to delete: "); scanf("%d",&del); delete(del); } case 3: replace(); break; case 4: printf("Enter Number in the List to insert after \n"); scanf("%d",&m1); insert_middle(m1); break; case 5: reverse(); break; case 6: if(root==NULL) { printf("List is empty \n"); break; } printf("\n"); display(); break; case 7: exit(0); default: printf("Wrong Option\n"); break; } // switch } //while } // main int insert(val) { temp=root; newn=malloc(sizeof(struct node)); newn->data=val; newn->right=newn->left=NULL; if(root==NULL) { root=newn; } else { while(temp->right!=NULL) { temp=temp->right; } temp->right=newn; newn->left=temp; } temp=root; } int delete(del) { temp=root; while(temp->data!=del) { if(temp->right==NULL) { printf("Number is not in the list\n"); temp=root; return; } temp=temp->right; } if(temp==root) { // If the delete number is in root node, not pointing to any node means if(temp->right==NULL) { free(temp); root=NULL; printf("List became empty \n"); return; } else { /* if the delete number is in root node but root pointing to other node means, need to assing root next node as root node. then we need to delete */ root=root->right; root->left=NULL; free(temp); temp=root; return; } } else { /* if the delete number is not in the root node means, two condition we need to check. */ if(temp->right==NULL) { /* 1. if the delete number is in last node means, we need to set NULL in previous node's right */ temp->left->right=NULL; free(temp); } else { /* if the delete number is in the middle, then do this */ temp->left->right=temp->right; temp->right=temp->left->right; } temp=root; } } int insert_middle(int m1) { int num; temp=root; while(temp->data!=m1) { if(temp->right==NULL) { printf("The number not in the list"); temp=root; return; } temp=temp->right; } if(temp->data==m1) { printf("Enter value to insert: "); scanf("%d", &num); newn=malloc(sizeof(struct node)); newn->data=num; if(temp->right==NULL) { newn->left=temp; temp->right=newn; newn->right=NULL; } else { newn->right=temp->right; newn->right->left=newn; temp->right=newn; newn->left=temp; } } else { printf("The number you have given is not correct/not in the list: "); } temp=root; } replace() { } reverse() { printf("Before Reverse \n"); display(); printf("\n"); struct node *temp1,*temp2; temp=temp1=root; while(temp1->right!=NULL) { temp1=temp1->right; } while(1) { if(temp->right==temp1) { temp2=temp->data; temp->data=temp1->data; temp1->data=temp2; printf("After Reverse \n"); display(); return; } else if(temp==temp1) { printf("After Reverse \n"); display(); return; } temp2=temp->data; temp->data=temp1->data; temp1->data=temp2; temp=temp->right; temp1=temp1->left; } temp=temp1=root; free(temp2); printf("After Reverse \n"); display(); } display() { temp=root; printf(" %d ->",temp->data); while(temp->right!=NULL) { temp=temp->right; printf(" %d -> ",temp->data); } temp=root; }
« Prev
Next »
If you have any queries please email us at
info@motionzen.com