Advertisement
Guest User

Untitled

a guest
Feb 20th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.44 KB | None | 0 0
  1. /* header files*/
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4.  
  5. /* Node definition */
  6. typedef struct node
  7. {
  8. int info;
  9. struct node *link;
  10. }list;
  11.  
  12. /* Function declaration */
  13. void display(list * start);
  14. void search(list *start,int item);
  15. list *addAtBegin(list *start, int data);
  16. list *addAtEnd(list *start, int data);
  17. list *addAfter(list *start,int data,int item);
  18. list *addBefore(list *start,int data,int item);
  19. list *addAtPosition(list *start,int data,int pos);
  20. list *Pop(list *start);
  21. list *Del(list *start,int data);
  22. list *reverseList(list *start);
  23. int main()
  24. {
  25. int data,choice,item,pos;
  26. list * start = NULL;
  27. while(1)
  28. {
  29. printf("1.Add at Begin\t");
  30. printf("2.Add at End\n");
  31. printf("3.Display list\t");
  32. printf("4.Search an Item\n");
  33. printf("5.Enter an Item to insert after\n");
  34. printf("6.Enter an Item to insert before\n");
  35. printf("7.Enter a Position in which want to insert \n");
  36. printf("8.Pop operation...\n");
  37. printf("10.Delete any node\n");
  38. printf("11. Reverse list..\n");
  39. printf("9.QUIT.....\n");
  40. printf("Enter choice:");
  41. scanf("%d",&choice);
  42. printf("\n");
  43. switch(choice)
  44. {
  45. case 1:
  46. printf("Enter data to Add at begin:");
  47. scanf("%d",&data);
  48. start=addAtBegin(start,data);
  49. break;
  50. case 2:
  51. printf("Enter data to Add at end:");
  52. scanf("%d",&data);
  53. start=addAtEnd(start,data);
  54. break;
  55. case 3:
  56. display(start);
  57. break;
  58. case 4:
  59. printf("Enter item to search:");
  60. scanf("%d",&item);
  61. search(start,item);
  62. break;
  63. case 5:
  64. printf("Enter data to insert:");
  65. scanf("%d",&data);
  66. printf("Enter item after which want to insert:");
  67. scanf("%d",&item);
  68. start=addAfter(start,data,item);
  69. break;
  70.  
  71. case 6:
  72. printf("Enter data to insert:");
  73. scanf("%d",&data);
  74. printf("Enter item before which want to insert:");
  75. scanf("%d",&item);
  76. start=addBefore(start,data,item);
  77. break;
  78.  
  79. case 7:
  80. printf("Enter data to insert:");
  81. scanf("%d",&data);
  82. printf("Enter pos in which want to insert:");
  83. scanf("%d",&pos);
  84. start=addAtPosition(start,data,pos);
  85. break;
  86.  
  87. case 8:
  88. start=Pop(start);
  89. break;
  90.  
  91. case 9:
  92. exit(0);
  93.  
  94. case 10:
  95. printf("Enter node to be deleted:");
  96. scanf("%d",&data);
  97. start=Del(start,data);
  98. printf("%d deleted..\n",data);
  99. break;
  100. case 11:
  101. printf("The list before reverse.\n");
  102. display(start);
  103. printf("The list after reverse.\n");
  104. start = reverseList(start);
  105. display(start);
  106. break;
  107. }/* End switch*/
  108. }/* End of while*/
  109.  
  110. }/* End of main*/
  111.  
  112. void display(list * start)
  113. {
  114. list *p;
  115. p=start;
  116. if(p==NULL)
  117. printf("List is empty..\n");
  118. printf("Start -> ");
  119. while(p!=NULL)
  120. {
  121. printf("%d -> ",p->info);
  122. p=p->link;
  123. }
  124. printf("NULL");
  125. printf("\n");
  126. }
  127. void search(list *start,int item)
  128. {
  129. list *p;
  130. int pos =1;
  131. p=start;
  132. if(p==NULL)
  133. {
  134. printf("List is empty BOSS...\n");
  135. return;
  136. }
  137. while(p!=NULL)
  138. {
  139. if(p->info==item)
  140. {
  141. printf("%d found in %d position\n",item,pos);
  142. return;
  143. }
  144. pos++;
  145. p=p->link;
  146. }
  147. printf("%d not present ....\n",item);
  148. }
  149. list *addAtBegin(list *start, int data)
  150. {
  151. list *tmp;
  152. tmp=(list *)malloc(sizeof(list));
  153. tmp->info=data;
  154. tmp->link=start;
  155. start=tmp;
  156. return start;
  157. }
  158.  
  159. list *addAtEnd(list *start, int data)
  160. {
  161. list *tmp,*p;
  162. p=start;
  163. tmp=(list *) malloc(sizeof(list));
  164. tmp->info=data;
  165. while(p->link!=NULL)
  166. p=p->link;
  167.  
  168. p->link=tmp;
  169. tmp->link=NULL;
  170.  
  171. return start;
  172. }
  173. list *addAfter(list *start,int data,int item)
  174. {
  175. list *p,*tmp;
  176. if(start==NULL)
  177. {
  178. printf("List is empty BOSS...\n");
  179. return start;
  180. }
  181. p=start;
  182. while(p->link!=NULL)
  183. {
  184. if(p->info==item)
  185. {
  186. tmp= (list *)malloc(sizeof(list));
  187. tmp->info=data;
  188.  
  189. tmp->link=p->link;
  190. p->link=tmp;
  191.  
  192. return start;
  193. }
  194. p=p->link;
  195. }
  196. printf("%d not present in the list...\n",item);
  197. return start;
  198. }
  199. list *addBefore(list *start,int data,int item)
  200. {
  201. list *tmp,*p;
  202.  
  203. if(item==start->info)
  204. {
  205. tmp= (list *)malloc(sizeof(list));
  206. tmp->info=data;
  207. tmp->link=start;
  208. start=tmp;
  209. return start;
  210. }
  211. p=start;
  212.  
  213. while(p->link!=NULL)
  214. {
  215. if(p->link->info==item)
  216. {
  217. tmp= (list *)malloc(sizeof(list));
  218. tmp->info=data;
  219.  
  220. tmp->link=p->link; // Important to remember this order/
  221. p->link=tmp;
  222. return start;
  223. }
  224. p=p->link;
  225. }
  226. printf("%d not present in the list...\n",item);
  227. return start;
  228. }
  229. list *addAtPosition(list *start,int data,int pos)
  230. {
  231. list *tmp,*p;
  232. int i;
  233. tmp=(list *)malloc(sizeof(list));
  234. tmp->info=data;
  235. if(pos==1)
  236. {
  237. tmp->link=start;
  238. start=tmp;
  239. return start;
  240. }
  241. p=start;
  242. for(i=1; i<pos-1 && p!=NULL; i++)
  243. p=p->link;
  244.  
  245. if(p==NULL)
  246. {
  247. printf("Less than %d position in the list..\n",pos);
  248. }
  249. else{
  250. tmp->link=p->link;
  251. p->link=tmp;
  252. }
  253.  
  254. return start;
  255. }
  256. list *Pop(list *start)
  257. {
  258. list *p;
  259. p=start;
  260. if(start==NULL)
  261. printf("List is empty BOSS...\n");
  262. else{
  263. start=start->link;
  264. free(p);
  265. printf("Popping Done...\n\n");
  266. }
  267. return start;
  268. }
  269. list *Del(list *start,int data)
  270. {
  271. list *p,*tmp;
  272.  
  273. if(start==NULL){
  274. printf("List is empty BOSS...\n");
  275. return start;
  276. }
  277. if(start->info==data)
  278. {
  279. tmp=start;
  280. start=start->link;
  281. free(tmp);
  282. return start;
  283. }
  284. p=start;
  285.  
  286. while(p->link!=NULL)
  287. {
  288. if(p->link->info==data)
  289. {
  290. tmp=p->link;
  291. p->link=tmp->link;
  292. free(tmp);
  293. return start;
  294. }
  295. p=p->link;
  296. }
  297. printf("%d not found...\n",data);
  298. return start;
  299. }
  300. list *reverseList(list *start)
  301. {
  302. list *prev,*p,*next;
  303. prev=NULL;
  304. next=NULL;
  305. p=start;
  306. while(p!=NULL)
  307. {
  308. next=p->link;
  309. p->link=prev;
  310. prev=p;
  311. p=next;
  312. }
  313. start=prev;
  314. return start;
  315. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement