You are on page 1of 6

1 #include <stdio.

h>
2 #include <stdlib.h>
3 struct node{
4 struct node *left;
5 char data;
6 struct node *right;
7 }*start1, *start2, *temp;
8 struct node* createList(int n)
9 {
10 struct node *start,*newnode;
11 char ch, i;
12 if(n<1) return NULL;
13 printf("Enter Data for node 1");
14 fflush(stdin);
15 scanf("%c",&ch);
16 newnode=(struct node*)malloc(sizeof(struct node));
17 newnode->left=NULL;
18 newnode->right=NULL;
19 newnode->data=ch;
20 start=newnode;
21 temp=start;
22 for(i=2;i<=n;i++)
23 {
24 printf("Enter Data for node %d",i);
25 fflush(stdin);
26 scanf("%c",&ch);
27 newnode=(struct node*)malloc(sizeof(struct node));
28 newnode->left=temp;
29 newnode->right=NULL;
30 newnode->data=ch;
31 temp->right=newnode;
32 temp=temp->right;
33 }
34 return start;
35 }
36 void merge(struct node *ptr1,struct node *ptr2)
37 {
38 if(ptr1==NULL||ptr2==NULL)
39 {
40 printf("\nEmpty List found");
41 return;
42 }
43 while(ptr1->right!=NULL)
44 ptr1=ptr1->right;
45 ptr1->right=ptr2;
46 ptr2->left=ptr1;
47 }
48 void insert(int n)
49 {
50 temp=start1;
51 char ch;
52 struct node *newnode=(struct node*)malloc(sizeof(struct node));
53 while(n-->2)
54 {
55 if(temp==NULL)
56 {
57 printf("\nNode doesn't exist");
58 return;
59 }
60 temp=temp->right;
61 }
62 printf("\nEnter data for new node");
63 fflush(stdin);
64 scanf("%c",&ch);
65 newnode->data=ch;
66 newnode->left=temp;
67 newnode->right=temp->right;
68 temp->right=newnode;
69 }
70 void delete(int n)
71 {
72 temp=start1;
73 struct node *ptr;
74 while(n-->2)
75 {
76 if(temp==NULL)
77 {
78 printf("\nNode doesn't exist");
79 return;
80 }
81 temp=temp->right;
82 }
83 ptr=temp->right;
84 temp->right=temp->right->right;
85 temp->right->left=temp;
86 free(ptr);
87 }
88 void compare()
89 {
90 struct node *ptr1=start1,*ptr2=start2;
91 int flag=0;
92 while(ptr1!=NULL||ptr2!=NULL)
93 {
94 if(ptr1->right==NULL&&ptr2->right!=NULL)
95 {
96 flag--;break;
97 }
98 else if(ptr1->right!=NULL&&ptr2->right==NULL)
99 {
100 flag--;break;
101 }
102 else
103 {
104 if(ptr1->data>ptr2->data)
105 {flag++;break;}
106 else if(ptr1->data<ptr2->data)
107 {flag--;break;}
108 }
109 }
110 if(flag>0)
111 printf("\nList 1 > List 2");
112 else if(flag<0)
113 printf("\nList 1 < List 2");
114 else
115 printf("\nList 1 = List 2");
116 }
117 void reverse()
118 {
119 if(start1==NULL)
120 {
121 printf("\nEmpty list");
122 return;
123 }
124 temp=start1;
125 while(temp->right!=NULL)
126 temp=temp->right;
127 while(temp!=NULL)
128 {
129 printf("%c", temp->data);
130 temp=temp->left;
131 }
132 }
133 int search(char ch)
134 {
135 int count=1;
136 temp=start1;
137 while(temp!=NULL)
138 {
139 if(temp->data==ch)
140 return count;
141 count++;
142 temp=temp->right;
143 }
144 return -1;
145 }
146 void swap(int a, int b)
147 {
148 struct node *ptr1=start1, *ptr2=start1;
149 while(a-->1)
150 {
151 if(ptr1==NULL)
152 {
153 printf("\nNODE DOESN'T EXIST");
154 return;
155 }
156 ptr1=ptr1->right;
157 }
158 while(b-->1)
159 {
160 if(ptr2==NULL)
161 {
162 printf("\nNODE DOESN'T EXIS");
163 return;
164 }
165 ptr2=ptr2->right;
166 }
167 char ch=ptr1->data;
168 ptr1->data=ptr2->data;
169 ptr2->data=ch;
170 }
171 void sort()
172 {
173 int flag=1;
174 while(flag)
175 {
176 temp=start1;
177 flag=0;
178 while(temp->right!=NULL)
179 {
180 if(temp->data>temp->right->data)
181 {
182 char ch=temp->data;
183 temp->data=temp->right->data;
184 temp->right->data=ch;
185 flag=1;
186 }
187 temp=temp->right;
188 }
189 }
190 }
191 void split(int n)
192 {
193 temp=start1;
194 while(n-->2)
195 {
196 if(temp==NULL)
197 {
198 printf("\nNODE DOESNT EXIST");
199 return;
200 }
201 temp=temp->right;
202 }
203 start2=temp->right;
204 start2->left=NULL;
205 temp->right=NULL;
206 }
207 void update(int n)
208 {
209 char ch;
210 temp=start1;
211 while(n-->1)
212 {
213 if(temp==NULL)
214 {
215 printf("\nNODE DOESNT EXIST");
216 return;
217 }
218 temp=temp->right;
219 }
220 printf("Enter new Value");
221 fflush(stdin);
222 scanf("%c", &ch);
223 temp->data=ch;
224 }
225 void leftshift(int n)
226 {
227 if(n==0)
228 return;
229 temp=start1;
230 while(temp->right!=NULL)
231 temp=temp->right;
232 temp->right=start1;
233 start1->left=temp;
234 start1=start1->right;
235 temp->right->right=NULL;
236 start1->left=NULL;
237 leftshift(--n);
238 }
239 void rightshift(int n)
240 {
241 if(n==0)
242 return;
243 temp=start1;
244 while(temp->right->right!=NULL)
245 temp=temp->right;
246 temp->right->right=start1; start1->left=temp->right; start1->right->left=NULL;
247 start1=temp->right;
248 start1->right=NULL;
249 rightshift(--n);
250 }
251 void btrim(int n)
252 {
253 if(n==0)
254 return;
255 start1=start1->right;
256 start1->left=NULL;
257 btrim(--n);
258 }
259 void etrim(int n)
260 {
261 if(n==0)
262 return;
263 temp=start1;
264 if(temp->right==NULL)
265 {
266 start1=NULL;
267 return;
268 }
269 while(temp->right->right!=NULL)
270 temp=temp->right;
271 temp->right=NULL;
272 etrim(--n);
273 }
274 void truncate()
275 {
276 start1=NULL;
277 start2=NULL;
278 }
279 void traverse()
280 {
281 printf("List 1 : \n");
282 temp=start1;
283 while(temp!=NULL)
284 {
285 printf("%c", temp->data);
286 temp=temp->right;
287 }
288 printf("List 2 : \n");
289 temp=start2;
290 while(temp!=NULL)
291 {
292 printf("%c", temp->data);
293 temp=temp->right;
294 }
295 }
296 void uni()
297 {
298 struct node *ptr=start1, *ptr1=start2;
299 int flag=0;
300 while(ptr1!=NULL)
301 {
302 flag=0;
303 do{
304 if(ptr->data==ptr1->data)
305 {
306 flag=1;
307 }
308 temp=ptr;
309 ptr=ptr->right;
310 }while(ptr!=NULL);
311 ptr=temp;
312 if(flag==0)
313 {
314 struct node *newnode=(struct node *) malloc(sizeof(struct node));
315 newnode->data=ptr1->data;
316 ptr->right=newnode;
317 newnode->left=ptr;
318 newnode->right=NULL;
319 }
320 ptr=start1;
321 ptr1=ptr1->right;
322 }
323 }
324 void inter()
325 {
326 struct node *ptr=start1,*ptr1=start2;
327 while(ptr1!=NULL)
328 {
329 do{
330 if(ptr->data==ptr1->data)
331 {
332 printf("%c",ptr->data);
333 }
334 ptr=ptr->right;
335 }while(ptr!=NULL);
336 ptr=start1;
337 ptr1=ptr1->right;
338 }
339 }
340 int main()
341 {
342 int choice,a,b;
343 char ch;
344 int flag=1;
345 while(flag)
346 {
347 printf("\n-----------------------------------------------------------\n");
348 printf("1. Initialize the lists\n");
349 printf("2. Merge\n");
350 printf("3. Insert\n");
351 printf("4. Delete\n");
352 printf("5. Compare\n");
353 printf("6. Reverse\n");
354 printf("7. Searching\n");
355 printf("8. Swap\n");
356 printf("9. Sort\n");
357 printf("10. Split\n");
358 printf("11. Update\n");
359 printf("12. Shift\n");
360 printf("13. Trim\n");
361 printf("14. Union\n");
362 printf("15. Intersection\n");
363 printf("16. Truncate\n");
364 printf("17. Print\n");
365 printf("0. Exit\n");
366 printf("-----------------------------------------------------------\n");
367 scanf("%d",&choice);
368 printf("\n-----------------------------------------------------------\n");
369 switch(choice)
370 {
371 case 0:
372 flag=0;
373 break;
374 case 1:
375 printf("Enter number of elements for list 1: ");
376 scanf("%d",&a);
377 start1=createList(a);
378 printf("Enter number of elements for list 2: ");
379 scanf("%d",&a);
380 start2=createList(a);
381 break;
382 case 2:
383 merge(start1,start2);
384 break;
385 case 3:
386 printf("Enter position for insertion: ");
387 scanf("%d",&a);
388 insert(a);
389 break;
390 case 4:
391 printf("Enter position for deletion: ");
392 scanf("%d",&a);
393 delete(a);
394 break;
395 case 5:
396 compare();
397 break;
398 case 6:
399 reverse();
400 break;
401 case 7:
402 printf("Enter element to be found: ");
403 fflush(stdin);
404 scanf("%c",&ch);
405 printf("Found at %d",search(ch));
406 break;
407 case 8:
408 printf("Enter positions for swap: ");
409 scanf("%d %d",&a, &b);
410 swap(a, b);
411 break;
412 case 9:
413 sort();
414 break;
415 case 10:
416 printf("Enter position for split: ");
417 scanf("%d",&a);
418 split(a);
419 break;
420 case 11:
421 printf("Enter position for update: ");
422 scanf("%d",&a);
423 update(a);
424 break;
425 case 12:
426 printf("Enter places to shift left");
427 scanf("%d",&a);
428 leftshift(a);
429 printf("Enter places to shift right");
430 scanf("%d",&a);
431 rightshift(a);
432 break;
433 case 13:
434 printf("Enter places to trim from beginning and from end");
435 scanf("%d %d",&a,&b);
436 btrim(a);
437 etrim(b);
438 break;
439 case 14:
440 uni();
441 break;
442 case 15:
443 inter();
444 break;
445 case 16:
446 truncate();
447 break;
448 case 17:
449 traverse();
450 break;
451 default:
452 printf("Wrong choice try again");
453 }
454 }
455 }
456

You might also like