doublelink.c
199 linesc
DOWNLOAD
1// Aim: Program to perform Double Linked List operations (Insertion, Deletion).
2#include<stdio.h>
3#include<stdlib.h>
4
5struct node {
6    int data;
7    struct node *Llink,*Rlink;
8};
9
10struct node *head = NULL;
11
12void insertfront(int x){
13    struct node *newnode = (struct node*)malloc(sizeof(struct node));
14    newnode->data = x;
15    newnode->Llink = NULL;
16    newnode->Rlink = NULL;
17    if(head == NULL){
18        head = newnode;
19    }
20    else{
21        newnode->Rlink = head;
22        head->Llink = newnode;
23        head = newnode;
24    }
25}
26
27void insertend(int x){
28    struct node *newnode = (struct node*)malloc(sizeof(struct node));
29    newnode->data = x;
30    newnode->Llink = NULL;
31    newnode->Rlink = NULL;
32    if(head == NULL){
33        head = newnode;
34    }
35    else{
36        struct node *ptr = head;
37        while(ptr->Rlink != NULL){
38            ptr = ptr->Rlink;
39        }
40        ptr->Rlink = newnode;
41        newnode->Llink = ptr;
42    }
43}
44
45void insertkey(int x,int key){
46    if(head == NULL){
47        printf("List is empty\n");
48        return;
49    }
50    struct node *ptr = head;
51    while(ptr->data != key && ptr->Rlink != NULL){
52        ptr = ptr->Rlink;
53    }
54    if(ptr->data != key){
55        printf("Key not found\n");
56    }
57    else{
58        struct node *newnode = (struct node*)malloc(sizeof(struct node));
59        newnode->data = x;
60        newnode->Llink = ptr;
61        newnode->Rlink = ptr->Rlink;
62        if(ptr->Rlink != NULL){
63            ptr->Rlink->Llink = newnode;
64        }
65        ptr->Rlink = newnode;
66    }
67}
68
69void deletefront(){
70    if(head == NULL){
71        printf("List is empty\n");
72    }
73    else if(head->Rlink == NULL){
74        struct node *temp = head;
75        head = NULL;
76        free(temp);
77    }
78    else{
79        head = head->Rlink;
80        free(head->Llink);
81        head->Llink = NULL;
82    }
83}
84
85void deleteend(){
86    if(head == NULL){
87        printf("List is empty\n");
88    }
89    else if(head->Rlink == NULL){
90        struct node *temp = head;
91        head = NULL;
92        free(temp);
93    }
94    else{
95        struct node *ptr = head;
96        while(ptr->Rlink != NULL){
97            ptr = ptr->Rlink;
98        }
99        ptr->Llink->Rlink = NULL;
100        free(ptr);
101    }
102}
103
104void deletekey(int key){
105    if(head == NULL){
106        printf("List is empty\n");
107    }
108    else if(head->Rlink == NULL){
109        if(head->data == key){
110            struct node *temp = head;
111            head = NULL;
112            free(temp);
113        }
114        else{
115            printf("Key not found\n");
116        }
117    }
118    else if(head->data == key){
119        head = head->Rlink;
120        free(head->Llink);
121        head->Llink = NULL;
122    }
123    else{
124        struct node *ptr = head;
125        while(ptr->data != key && ptr->Rlink != NULL){
126            ptr = ptr->Rlink;
127        }
128        if(ptr->data != key){
129            printf("Key not found\n");
130        }
131        else{
132            ptr->Llink->Rlink = ptr->Rlink;
133            if(ptr->Rlink != NULL){
134                ptr->Rlink->Llink = ptr->Llink;
135            }
136            free(ptr);
137        }
138    }
139}
140
141void display(){
142    if(head == NULL){
143        printf("List is empty\n");
144    }
145    else{
146        struct node *ptr = head;
147        while(ptr != NULL){
148            printf("%d ",ptr->data);
149            ptr = ptr->Rlink;
150        }
151        printf("\n");
152    }
153}
154
155void main(){
156    int ch,x,key;
157    while(1){
158        printf("1.Insert front\n2.Insert end\n3.Insert key\n4.Delete front\n5.Delete end\n6.Delete key\n7.Display\n8.Exit\n");
159        printf("Enter your choice: ");
160        scanf("%d",&ch);
161        switch(ch){
162            case 1:
163                printf("Enter the element to insert: ");
164                scanf("%d",&x);
165                insertfront(x);
166                break;
167            case 2:
168                printf("Enter the element to insert: ");
169                scanf("%d",&x);
170                insertend(x);
171                break;
172            case 3:
173                printf("Enter the element to insert: ");
174                scanf("%d",&x);
175                printf("Enter the key: ");
176                scanf("%d",&key);
177                insertkey(x,key);
178                break;
179            case 4:
180                deletefront();
181                break;
182            case 5:
183                deleteend();
184                break;
185            case 6:
186                printf("Enter the key: ");
187                scanf("%d",&key);
188                deletekey(key);
189                break;
190            case 7:
191                display();
192                break;
193            case 8:
194                exit(0);
195            default:
196                printf("Invalid choice\n");
197        }
198    }
199}