Advertisement
katbiral

LINKED LIST double

Feb 24th, 2020
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.44 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. typedef struct Data
  5. {
  6. int a;
  7. struct Data *next;
  8. struct Data *prev;
  9. } Data;
  10.  
  11. Data *head=NULL;
  12. Data *tail=NULL;
  13.  
  14. void insert_at_first(int x)
  15. {
  16. Data *new_node = (Data*)malloc(sizeof(Data));
  17.  
  18. new_node -> a = x;
  19. new_node -> next = NULL;
  20. new_node -> prev = NULL;
  21.  
  22. if(head == NULL)
  23. {
  24. head = new_node;
  25. tail = new_node;
  26. return;
  27. }
  28.  
  29. new_node -> next = head;
  30. new_node -> prev = NULL;
  31. head = new_node;
  32. }
  33.  
  34. void insert_at_end(int x)
  35. {
  36. Data *new_node = (Data*)malloc(sizeof(Data));
  37.  
  38. new_node -> a = x;
  39.  
  40. new_node -> next = NULL;
  41. new_node -> prev = NULL;
  42. if(head==NULL)
  43. {
  44. head=new_node;
  45. tail=new_node;
  46. return;
  47. }
  48. new_node->prev=tail;
  49. tail -> next = new_node;
  50. tail=new_node;
  51. }
  52. void insert_at_nth(int n,int x)
  53. {
  54. Data *newnode=(Data*)malloc(sizeof(Data));
  55. newnode->a=x;
  56. newnode->next=NULL;
  57. Data *temp=head;
  58.  
  59. if(head == NULL || n == 1)
  60. {
  61. newnode -> next = head;
  62. head->prev = newnode;
  63. head = newnode;
  64. tail=newnode;
  65. return;
  66. }
  67.  
  68. n=n-2;
  69.  
  70. while(n-- && temp -> next != NULL)
  71. {
  72. temp=temp->next;
  73. }
  74.  
  75. newnode->next=temp->next;
  76. temp->next->prev=newnode;
  77. newnode->prev=temp;
  78. temp->next=newnode;
  79. }
  80.  
  81.  
  82. void del_by_pos(int n)
  83. {
  84. Data *temp=head;
  85.  
  86. if(n==1)
  87. {
  88. head = temp -> next;
  89. head -> prev = NULL;
  90. free(temp);
  91. return;
  92. }
  93. else
  94. {
  95. n=n-2;
  96. while(n-- && temp != NULL)
  97. {
  98. temp=temp -> next;
  99. }
  100. Data *del= temp -> next;
  101. temp -> next = del-> next;
  102. del -> prev = temp;
  103. free(del);
  104. temp = head;
  105. while(temp != NULL)
  106. {
  107. printf("%d ", temp -> a);
  108. temp = temp -> next;
  109. }
  110. printf("\n");
  111. }
  112. }
  113.  
  114. int count()
  115. {
  116. int cnt=0;
  117. Data *temp = head;
  118. while(temp != NULL)
  119. {
  120. temp = temp -> next;
  121. ++cnt;
  122. }
  123. printf("Total nodes %d\n",cnt);
  124. return cnt;
  125. }
  126. int Add()
  127. {
  128. int sum=0;
  129. Data *temp = head;
  130. sum = temp -> a;
  131. while(temp -> next != NULL)
  132. {
  133. temp = temp -> next;
  134. sum = sum + temp -> a;
  135. }
  136. printf("Total sum %d\n",sum);
  137. return sum;
  138. }
  139. void search(int x)
  140. {
  141. int c=0;
  142. Data *temp = head;
  143. while(temp != NULL)
  144. {
  145. if (temp -> a == x)
  146. {
  147. ++c;
  148. }
  149. temp = temp -> next;
  150. }
  151. if (c>0)
  152. {
  153. printf("Match Found\n");
  154. }
  155. else
  156. printf("Match Not Found\n");
  157. }
  158. void Avr()
  159. {
  160. float av;
  161. int sum=0,cnt=0;
  162. Data *temp = head;
  163. sum = temp -> a;
  164. while(temp -> next != NULL)
  165. {
  166. temp = temp -> next;
  167. sum = sum + temp -> a;
  168. ++cnt;
  169. }
  170.  
  171. av = ((sum*1.00)/(cnt*1.00));
  172. printf ("Average %.2lf\n",av);
  173. }
  174.  
  175. void Print()
  176. {
  177. Data *temp = head;
  178.  
  179. while(temp != NULL)
  180. {
  181. printf("%d ", temp -> a);
  182. temp = temp -> next;
  183. }
  184. printf("\n");
  185. }
  186.  
  187. int main()
  188. {
  189.  
  190. insert_at_end(6);
  191. insert_at_first(5);
  192. insert_at_first(4);
  193. insert_at_first(3);
  194. insert_at_end(6);
  195. insert_at_end(7);
  196. Print();
  197. count();
  198. Add();
  199. search(3);
  200. Avr();
  201. del_by_pos(2);
  202. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement