#include #include #include struct Tperson { char name[20]; int groesse; //in cm int gebdat; //jahrmonattag -> z.B.: 20020815 struct Tperson *next; }; void append_element(struct Tperson **anker,struct Tperson *element) { struct Tperson *liste; liste=*anker; if(liste) { while (liste->next) liste=liste->next; liste->next = element; element->next = NULL; } else { *anker=element; } } struct Tperson *person_eingeben(void) { struct Tperson *merker; char gebdat[10],newgebdat[9]="00000000"; int position=0; merker = (struct Tperson*)malloc(sizeof(struct Tperson)); printf("Name : "); scanf("%s",&(merker->name)); printf("Groesse : "); scanf("%d",&(merker->groesse)); printf("Geburtsdatum : "); scanf("%s",gebdat); strncpy(newgebdat+0,gebdat+6,4); strncpy(newgebdat+4,gebdat+3,2); strncpy(newgebdat+6,gebdat+0,2); merker->gebdat=atoi(newgebdat); merker->next=NULL; return merker; } struct Tperson *copy_person(struct Tperson *person) { struct Tperson *newperson; newperson = (struct Tperson*)malloc(sizeof(struct Tperson)); *newperson =*person; return newperson; } void insert_person(struct Tperson **anker,struct Tperson *person) { person->next=*anker; *anker=person; } int compare_groesse(struct Tperson *p1, struct Tperson *p2) { if (p1->groesse < p2->groesse) { return 1; } else return 0; } int compare_alter(struct Tperson *p1, struct Tperson *p2) { if (p1->gebdat > p2->gebdat) { return 1; } else return 0; } struct Tperson *sort(struct Tperson *liste, int (*compare)(struct Tperson*, struct Tperson*)) { struct Tperson *sortlist=NULL,**aktuell=NULL; if(liste) { insert_person(&sortlist, copy_person(liste)); liste=liste->next; } while(liste) { aktuell=&sortlist; while(*aktuell && compare(*aktuell, liste)) { aktuell=&((*aktuell)->next); } insert_person(aktuell, copy_person(liste)); liste=liste->next; } return sortlist; } void liste_ausgeben(struct Tperson *liste) { while(liste) { printf("Name: %s \t Groesse: %d \t Geb.Dat.: %d\n",liste->name,liste->groesse,liste->gebdat); liste=liste->next; } } void personen_intervall(struct Tperson *liste) { int obere,untere,zaehler=0; printf("\nObere und Untere Grenze eingeben:"); scanf("%d %d",&obere,&untere); while(liste) { if((liste->groesse<=obere) && (liste->groesse>=untere)) zaehler++; liste=liste->next; } printf("\nAnzahl der zutreffenden Personen = %d\n\n",zaehler); } int main(void) { struct Tperson *Kartei=NULL,*nach_gr,*nach_alter; do{ append_element(&Kartei,person_eingeben()); printf("\nWeiter machen?"); }while(getchar(),getchar()!='n'); liste_ausgeben(Kartei); nach_gr = sort(Kartei, compare_groesse); nach_alter = sort(Kartei, compare_alter); printf("\n-------------Nach Groesse-------------\n\n"); liste_ausgeben(nach_gr); printf("\n--------------Nach Alter--------------\n\n"); liste_ausgeben(nach_alter); personen_intervall(Kartei); return 0; }