Advertisement
Guest User

Untitled

a guest
Mar 29th, 2020
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.27 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define NAME_SIZE 50
  6.  
  7.  
  8. typedef struct Name
  9. {
  10. char *name;
  11. int nr;
  12. struct Name* next_name;
  13. } ListName;
  14. ListName *prim=NULL;
  15.  
  16. typedef struct Nr
  17. {
  18. char *name;
  19. int nr;
  20. struct Nr* next_nr;
  21. } ListNr;
  22. ListNr *prim2=NULL;
  23.  
  24. ListName *createName(char *name,int nr)
  25. {
  26. ListName *p,*q;
  27. p=(ListName*)malloc(sizeof(ListName));
  28. p->name=(char*)malloc(strlen(name)+1);
  29. strcpy(p->name,name);
  30. p->nr=nr;
  31. p->next_name=NULL;
  32. if(prim==NULL)
  33. {
  34. return p;
  35. }
  36. else if(strcmp(prim->name,p->name)>0)
  37. {
  38. p->next_name=prim;
  39. return p;
  40. }
  41. else
  42. {
  43.  
  44. q=prim;
  45. while(q->next_name!=NULL && strcmp(q->next_name->name,p->name)<0)
  46. q=q->next_name;
  47. p->next_name=q->next_name;
  48. q->next_name=p;
  49. return prim;
  50. }
  51. }
  52.  
  53. void displayName(ListName *prim)
  54. {
  55. ListName *q;
  56. q=prim;
  57. while(q!=NULL)
  58. {
  59. printf("\n%s %d",q->name,q->nr);
  60. q=q->next_name;
  61. }
  62. printf("\n");
  63. }
  64.  
  65.  
  66. ListNr *createNr(int nr,char *name)
  67. {
  68. ListNr *p,*q;
  69. p=(ListNr*)malloc(sizeof(ListNr));
  70. p->name=(char*)malloc(strlen(name)+1);
  71. strcpy(p->name,name);
  72. p->nr=nr;
  73. p->next_nr=NULL;
  74. if(prim2==NULL)
  75. {
  76. return p;
  77. }
  78. else if(prim2->nr < p->nr)
  79. {
  80. p->next_nr=prim2;
  81. return p;
  82. }
  83. else
  84. {
  85.  
  86. q=prim2;
  87. while(q->next_nr!=NULL && (q->next_nr->nr > p->nr))
  88. q=q->next_nr;
  89. p->next_nr=q->next_nr;
  90. q->next_nr=p;
  91. return prim2;
  92. }
  93. }
  94.  
  95. void displayNr(ListNr *prim2)
  96. {
  97. ListNr *q;
  98. q=prim2;
  99. while(q!=NULL)
  100. {
  101. printf("\n%d %s",q->nr,q->name);
  102. q=q->next_nr;
  103. }
  104. printf("\n");
  105. }
  106.  
  107.  
  108. ListName *lookupName(char *name)
  109. {
  110. ListName *q;
  111. q=prim;
  112. while(q!=NULL && strcmp(q->name,name)!=0)
  113. q=q->next_name;
  114. return q;
  115. }
  116.  
  117. ListNr *lookupNr(int nr)
  118. {
  119. ListNr *q1,*q2;
  120. int diff1,diff2;
  121. q1=prim2;
  122. q2=q1->next_nr;
  123. while(q2!=NULL && nr>q2->nr)
  124. {
  125. q1=q1->next_nr;
  126. q2=q2->next_nr;
  127. }
  128. diff1=q1->nr-nr;
  129. diff2=nr-q2->nr;
  130. if(diff1>diff2)
  131. return q2;
  132. else
  133. return q1;
  134. }
  135.  
  136. void ReadFile(char *path)
  137. {
  138. FILE *f = NULL;
  139. f = fopen(path, "r");
  140. char name[NAME_SIZE + 1];
  141. int count = 0;
  142. if(f == NULL)
  143. {
  144. perror(path);
  145. exit(1);
  146. }
  147.  
  148. while (!feof(f))
  149. {
  150. fscanf(f, "%s %d\n", name, &count);
  151. // printf ("read line %d - %s -> %d\n", i++, name, count);
  152. prim=createName(name,count);
  153. prim2=createNr(count,name);
  154. }
  155. fclose(f);
  156. }
  157.  
  158.  
  159. int main(int argc, char **argv)
  160. {
  161. int number,nr;
  162. char name[50];
  163. ListName *p1;
  164. ListNr *p2;
  165. if (argc < 2)
  166. {
  167. fprintf (stderr, "incorrect usage\n");
  168. exit(1);
  169. }
  170.  
  171. ReadFile(argv[1]);
  172.  
  173. while(number!=0)
  174. {
  175. printf("\n");
  176. printf("Press 0 to exit\n");
  177. printf("Press 1 to print first list\n");
  178. printf("Press 2 to print second list\n");
  179. printf("Press 3 to lookup name\n");
  180. printf("Press 4 to lookup nr of occurrences\n");
  181. scanf("%d",&number);
  182. printf("\n");
  183.  
  184. switch (number)
  185. {
  186. case 0:
  187. break;
  188. case 1:
  189. {
  190. displayName(prim);
  191. break;
  192. }
  193. case 2:
  194. {
  195. displayNr(prim2);
  196. break;
  197. }
  198. case 3:
  199. {
  200. printf("What name are you searching for?(upercase) ");
  201. scanf("%s",name);
  202. p1=lookupName(name);
  203. if(p1==NULL)
  204. printf("The name doesn't exist in the list");
  205. else
  206. printf("Number of occurrences for the name: %d",p1->nr);
  207. break;
  208. }
  209. case 4:
  210. {
  211. printf("What nr are you searching for? ");
  212. scanf("%d",&nr);
  213. p2=lookupNr(nr);
  214. printf("The coresponding name is %s",p2->name);
  215. break;
  216. }
  217. default:
  218. printf("Wrong input\n");
  219. }
  220. }
  221. return 0;
  222. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement