Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define NAME_SIZE 50
- typedef struct Name
- {
- char *name;
- int nr;
- struct Name* next_name;
- } ListName;
- ListName *prim=NULL;
- typedef struct Nr
- {
- char *name;
- int nr;
- struct Nr* next_nr;
- } ListNr;
- ListNr *prim2=NULL;
- ListName *createName(char *name,int nr)
- {
- ListName *p,*q;
- p=(ListName*)malloc(sizeof(ListName));
- p->name=(char*)malloc(strlen(name)+1);
- strcpy(p->name,name);
- p->nr=nr;
- p->next_name=NULL;
- if(prim==NULL)
- {
- return p;
- }
- else if(strcmp(prim->name,p->name)>0)
- {
- p->next_name=prim;
- return p;
- }
- else
- {
- q=prim;
- while(q->next_name!=NULL && strcmp(q->next_name->name,p->name)<0)
- q=q->next_name;
- p->next_name=q->next_name;
- q->next_name=p;
- return prim;
- }
- }
- void displayName(ListName *prim)
- {
- ListName *q;
- q=prim;
- while(q!=NULL)
- {
- printf("\n%s %d",q->name,q->nr);
- q=q->next_name;
- }
- printf("\n");
- }
- ListNr *createNr(int nr,char *name)
- {
- ListNr *p,*q;
- p=(ListNr*)malloc(sizeof(ListNr));
- p->name=(char*)malloc(strlen(name)+1);
- strcpy(p->name,name);
- p->nr=nr;
- p->next_nr=NULL;
- if(prim2==NULL)
- {
- return p;
- }
- else if(prim2->nr < p->nr)
- {
- p->next_nr=prim2;
- return p;
- }
- else
- {
- q=prim2;
- while(q->next_nr!=NULL && (q->next_nr->nr > p->nr))
- q=q->next_nr;
- p->next_nr=q->next_nr;
- q->next_nr=p;
- return prim2;
- }
- }
- void displayNr(ListNr *prim2)
- {
- ListNr *q;
- q=prim2;
- while(q!=NULL)
- {
- printf("\n%d %s",q->nr,q->name);
- q=q->next_nr;
- }
- printf("\n");
- }
- ListName *lookupName(char *name)
- {
- ListName *q;
- q=prim;
- while(q!=NULL && strcmp(q->name,name)!=0)
- q=q->next_name;
- return q;
- }
- ListNr *lookupNr(int nr)
- {
- ListNr *q1,*q2;
- int diff1,diff2;
- q1=prim2;
- q2=q1->next_nr;
- while(q2!=NULL && nr>q2->nr)
- {
- q1=q1->next_nr;
- q2=q2->next_nr;
- }
- diff1=q1->nr-nr;
- diff2=nr-q2->nr;
- if(diff1>diff2)
- return q2;
- else
- return q1;
- }
- void ReadFile(char *path)
- {
- FILE *f = NULL;
- f = fopen(path, "r");
- char name[NAME_SIZE + 1];
- int count = 0;
- if(f == NULL)
- {
- perror(path);
- exit(1);
- }
- while (!feof(f))
- {
- fscanf(f, "%s %d\n", name, &count);
- // printf ("read line %d - %s -> %d\n", i++, name, count);
- prim=createName(name,count);
- prim2=createNr(count,name);
- }
- fclose(f);
- }
- int main(int argc, char **argv)
- {
- int number,nr;
- char name[50];
- ListName *p1;
- ListNr *p2;
- if (argc < 2)
- {
- fprintf (stderr, "incorrect usage\n");
- exit(1);
- }
- ReadFile(argv[1]);
- while(number!=0)
- {
- printf("\n");
- printf("Press 0 to exit\n");
- printf("Press 1 to print first list\n");
- printf("Press 2 to print second list\n");
- printf("Press 3 to lookup name\n");
- printf("Press 4 to lookup nr of occurrences\n");
- scanf("%d",&number);
- printf("\n");
- switch (number)
- {
- case 0:
- break;
- case 1:
- {
- displayName(prim);
- break;
- }
- case 2:
- {
- displayNr(prim2);
- break;
- }
- case 3:
- {
- printf("What name are you searching for?(upercase) ");
- scanf("%s",name);
- p1=lookupName(name);
- if(p1==NULL)
- printf("The name doesn't exist in the list");
- else
- printf("Number of occurrences for the name: %d",p1->nr);
- break;
- }
- case 4:
- {
- printf("What nr are you searching for? ");
- scanf("%d",&nr);
- p2=lookupNr(nr);
- printf("The coresponding name is %s",p2->name);
- break;
- }
- default:
- printf("Wrong input\n");
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement