Advertisement
sahnaj

doubly

Oct 15th, 2019
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.91 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. typedef struct std_info
  4. {
  5. char name[50];
  6. int roll;
  7. struct std_info *pre;
  8. struct std_info *next;
  9. } data;
  10.  
  11. data *head = NULL;
  12. data *list = NULL;
  13. void insert_at_fast()
  14. {
  15. data *q = (data*)malloc(sizeof(data));
  16. printf("Enter your name: ");
  17. scanf(" %[^\n]s",q -> name);
  18. printf("Enter your roll: ");
  19. scanf("%d",&q -> roll);
  20. q -> pre = NULL;
  21. q -> next = NULL;
  22. list = head;
  23. list -> pre = q;
  24. q -> next = list;
  25. head = q;
  26. menu();
  27. return;
  28. }
  29. void insert_at_last()
  30. {
  31. data *q = (data*)malloc(sizeof(data));
  32. printf("Enter your name: ");
  33. scanf(" %[^\n]s",q -> name);
  34. printf("Enter your roll: ");
  35. scanf("%d",&q -> roll);
  36. q -> pre = NULL;
  37. q -> next = NULL;
  38. list = head;
  39. while(list -> next != NULL)
  40. {
  41. list = list -> next;
  42. }
  43. list -> next = q;
  44. q -> pre = list;
  45. q -> next = NULL;
  46. menu();
  47. return;
  48. }
  49.  
  50. void insert_at_nth(int n)
  51. {
  52. data *p = (data*)malloc(sizeof(data));
  53. printf("Enter your name: ");
  54. scanf(" %[^\n]s",p -> name);
  55. printf("Enter your name: ");
  56. scanf("%d",&p -> roll);
  57. p -> pre = NULL;
  58. p -> next = NULL;
  59. list = head;
  60. if(n == 1)
  61. {
  62. p -> next = list;
  63. list -> pre = p;
  64. head = p;
  65. menu();
  66. return;
  67. }
  68. else
  69. {
  70. int i;
  71. for(i=0; i<n-1; i++)
  72. {
  73. list = list -> next;
  74. }
  75. data *temp = list -> pre;
  76. temp -> next = p;
  77. p -> pre = temp;
  78. p -> next = list;
  79. list -> pre = p;
  80. menu();
  81.  
  82. }
  83. return;
  84. }
  85. void delete_by_value(int n)
  86. {
  87. list = head;
  88. while(list -> next != NULL)
  89. {
  90. if(head -> pre == NULL && list -> roll == n)
  91. {
  92. head = list -> next;
  93. head -> pre = NULL;
  94. free(list);
  95. menu();
  96. return;
  97. }
  98. else if(list -> roll == n)
  99. {
  100. data *temp = list -> pre;
  101. data *temp1 = list -> next;
  102. temp -> next = list -> next;
  103. temp1 -> pre = temp;
  104. free(list);
  105. menu();
  106. return;
  107. }
  108. list = list -> next;
  109. }
  110. data *temp1 = list -> pre;
  111. temp1 -> next = NULL;
  112. free(list);
  113. display();
  114.  
  115. return;
  116.  
  117. }
  118. void delete_by_pos(int n)
  119. {
  120. int i;
  121. list = head;
  122. if(n==1)
  123. {
  124. head = list -> next;
  125. head -> pre = NULL;
  126. free(list);
  127. menu();
  128. return;
  129. }
  130. else
  131. {
  132. for(i=0; i<n-1; i++)
  133. {
  134. list = list -> next;
  135. }
  136. data *temp = list -> pre;
  137. temp -> next = list -> next;
  138. list->next->pre = temp->next;
  139. free(list);
  140. menu();
  141. return;
  142. }
  143. }
  144. void search_by_position(int m)
  145. {
  146. int i;
  147. list = head;
  148. if(m==0)
  149. {
  150. printf("%s\n",list -> name);
  151. printf("%d\n",list -> roll);
  152. return;
  153. }
  154.  
  155. else
  156. {
  157. for(i=0; i<m-1; i++)
  158. {
  159. list = list -> next;
  160. }
  161. printf("%s\n",list -> name);
  162. printf("%d\n",list -> roll);
  163. return;
  164. }
  165. menu();
  166.  
  167. }
  168.  
  169. void search_by_value(int x)
  170. {
  171. list = head;
  172. while(list != NULL)
  173. {
  174. if(list -> roll == x)
  175. {
  176. printf("%s\n",list -> name);
  177. printf("%d\n",list -> roll);
  178. }
  179. list = list -> next;
  180. }
  181. menu();
  182. return;
  183.  
  184.  
  185. }
  186. void display()
  187. {
  188. list = head;
  189. while(list != NULL)
  190. {
  191. printf("%s\n",list -> name);
  192. printf("%d\n",list -> roll);
  193. list = list -> next;
  194. }
  195. }
  196. int menu()
  197. {
  198.  
  199. int m;
  200. printf("\n1.Insert at first\n");
  201. printf("2.insert_at_last\n");
  202. printf("3.insert_at_nth\n");
  203. printf("4.delete_by_value\n");
  204. printf("5.search_by_value\n");
  205. printf("6.search_by_position\n");
  206. printf("7.display\n");
  207. printf("8.Exit\n");
  208. scanf("%d",&m);
  209. switch(m)
  210. {
  211. case 1:
  212. {
  213. insert_at_fast();
  214. break;
  215. }
  216. case 2:
  217. {
  218. insert_at_last();
  219. break;
  220. }
  221. case 3:
  222. {
  223. int x;
  224. scanf("%d" ,&x);
  225.  
  226. insert_at_nth(x);
  227.  
  228. break;
  229. }
  230. case 4:
  231. {
  232. int y;
  233. printf("Enter the value you want to delete : ");
  234. scanf("%d",&y);
  235. delete_by_value(y);
  236. break;
  237. }
  238. case 5:
  239. {
  240. int z;
  241. printf("Enter the value : ");
  242. scanf("%d",&z);
  243. search_by_value(z);
  244. }
  245. case 6:
  246. {
  247. int r;
  248. printf("Enter position : ");
  249. scanf("%d",&r);
  250. search_by_position(r);
  251. }
  252. case 7:
  253. {
  254. display();
  255. }
  256. case 8:
  257. {
  258. exit(0);
  259. break;
  260. }
  261. default:
  262. {
  263. printf("You Choose Wrong Option!!\a\nPlease choose a Correct Option\n");
  264. menu();
  265. }
  266. }
  267.  
  268.  
  269. }
  270.  
  271.  
  272.  
  273.  
  274. int main()
  275. {
  276. int n,i;
  277. printf("Enter your node amount: ");
  278. scanf("%d",&n);
  279. for(i=0; i<n; i++)
  280. {
  281. data *N = (data*)malloc(sizeof(data));
  282. printf("Enter name: ");
  283. scanf(" %[^\n]s",N -> name);
  284. printf("Enter roll: ");
  285. scanf("%d",&N -> roll);
  286. N -> pre = NULL;
  287. N -> next = NULL;
  288.  
  289. if(head == NULL)
  290. {
  291. head = N;
  292. list = head;
  293. }
  294. else
  295. {
  296. list -> next = N;
  297. N -> pre = list;
  298. list = N;
  299. }
  300. }
  301. menu();
  302. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement