Adrita

doubly linked list

Aug 4th, 2019
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.35 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4.  
  5. struct linkedList
  6. {
  7. int data;
  8. struct linkedList *next;
  9. struct linkedList *prev;
  10. };
  11. typedef struct linkedList *node;
  12. node createnode()
  13. {
  14. node temp;
  15. temp= (node)malloc(sizeof (struct linkedList));
  16. temp->next=NULL;
  17. temp->prev=NULL;
  18. return temp;
  19. }
  20. void print_node(node head)
  21. {
  22. node p;
  23. p=head;
  24. while(p!=NULL)
  25. {
  26. printf("%d ", p->data);
  27. p=p->next;
  28. }
  29. printf("\n");
  30. }
  31. node add_node_front(node head, int data)
  32. {
  33. node temp=createnode();
  34. temp->data=data;
  35. if(head==NULL)
  36. {
  37. head=temp;
  38. return head;
  39. }
  40. temp->prev=NULL;
  41. temp->next=head;
  42. head->prev=temp;
  43. head=temp;
  44. return head;
  45. }
  46. node add_node(node head,int value)
  47. {
  48. node temp=createnode(),p;
  49. temp->data=value;
  50. if(head==NULL)
  51. {
  52. head=temp;
  53. return head;
  54. }
  55. p=head;
  56. while(p->next!=NULL)
  57. {
  58. p=p->next;
  59. }
  60. p->next=temp;
  61. temp->prev=p;
  62. return head;
  63. }
  64. node print_node_rev(node head)
  65. {
  66. node p;
  67. if(head==NULL)
  68. printf("empty\n");
  69. else
  70. {
  71. p=head;
  72. while(p->next!=NULL)
  73. {
  74. p=p->next;
  75. }
  76. while(p->prev!=NULL)
  77. {
  78. printf("%d ",p->data);
  79. p=p->prev;
  80. }
  81. printf("%d ",p->data);
  82. printf("\n");
  83.  
  84. }
  85. }
  86. node update_node(int value1,int value2,node head)
  87. {
  88. node p;
  89. p=head;
  90. while(p->data!=value1)
  91. p=p->next;
  92. if(p==NULL)
  93. printf("%d is not in the list\n",value1);
  94. else
  95. p->data=value2;
  96.  
  97. return head;
  98.  
  99. }
  100. void delete_node(node head, int value)
  101. {
  102. node p, n;
  103. if(head->data==NULL)
  104. {
  105. printf(" No element in List\n");
  106. return;
  107. }
  108. while(head->data!=value)
  109. head=head->next;
  110. if( head->prev!=NULL && head->next!=NULL )
  111. {
  112. p=head->prev;
  113. n=head->next;
  114. p->next=n;
  115. n->prev=p;
  116. }
  117. else if(head->prev==NULL && head->next!=NULL )
  118. {
  119. n=head->next;
  120. n->prev=NULL;
  121. }
  122. else if(head->prev!=NULL && head->next==NULL )
  123. {
  124. p=head->prev;
  125. p->next=NULL;
  126. }
  127. else if (head->prev==NULL && head->next==NULL)
  128. head->data=NULL;
  129. return;
  130. }
  131. node insert_node(node head,int value1,int value2)
  132. {
  133. node p=createnode(),q;
  134. p->data=value2;
  135. q=head;
  136. while(q->data!=value1)
  137. q=q->next;
  138. if(q==NULL)
  139. printf("%d is not in the list\n",value1);
  140. else
  141. {
  142. p->next=q->next;
  143. q->next=p;
  144. }
  145. return head;
  146.  
  147. }
  148. node insert_node_front(node head,int value1,int value2)
  149. {
  150. node p=createnode(),q;
  151. p->data=value2;
  152. q=head;
  153. while(q->data!=value1)
  154. q=q->next;
  155. p->prev = q->prev;
  156. p->next = q;
  157. q->prev = p;
  158. if(p->prev!=NULL)
  159. {
  160. p->prev->next = p;
  161. }
  162. else
  163. {
  164. head = p;
  165. }
  166.  
  167. return head;
  168. }
  169. int main()
  170. {
  171. int n,data;
  172. node head=NULL;
  173. printf("1. add node at back\n2. add node at front\n3. print\n4. print reverse\n5. update node\n6. delete node\n7. insert a node (back)\n8. insert a node (front)\n0. exit\n");
  174. while(1)
  175. {
  176. scanf("%d",&n);
  177. if(n==2)
  178. {
  179. printf("new data : ");
  180. scanf("%d", &data);
  181. head=add_node_front(head,data);
  182. }
  183. else if(n==1)
  184. {
  185. printf("new data : ");
  186. scanf("%d", &data);
  187. head=add_node(head,data);
  188. }
  189. else if(n==3)
  190. {
  191. print_node(head);
  192. }
  193. else if(n==4)
  194. {
  195. print_node_rev(head);
  196. }
  197. else if(n==5)
  198. {
  199. int x,y;
  200. scanf("%d %d",&x,&y);
  201. update_node(x,y,head);
  202. }
  203. else if(n==6)
  204. {
  205. int x;
  206. scanf("%d",&x);
  207. delete_node(head,x);
  208. }
  209. else if(n==7)
  210. {
  211. int x,y;
  212. scanf("%d %d",&x,&y);
  213. head=insert_node(head,x,y);
  214. }
  215. else if(n==8)
  216. {
  217. int a,b;
  218. scanf("%d %d",&a,&b);
  219. head=insert_node_front(head,a,b);
  220. }
  221. else if(n==0)
  222. return 0;
  223. }
  224. }
Advertisement
Add Comment
Please, Sign In to add comment