/* 5. Vjezba Qbqngnx: Ancvfngv cebtenz zretr xbwv fcnwn qin vyv ivfr fbegvenavu cbywn h wrqab fbegvenab cbywr. Nygreangviab, ancvfngv cebtenz xbwv fcnwn qivwr vyv ivfr cergubqab fbegvenavu qngbgrxn h fbegvenav ermhygng xbwv fr mncvfhwr an fgnaqneqav vmynm. Cbmvi cebtenzn wr: zretr svyr1 svyr2 ... */ // (c) kreator // 11:50 1997.12.07 #include #include #include #include #include struct item_type { //structure type.. char name[20+1]; int score; }; struct list_item { //structure of node struct item_type item; struct list_item *next; }; typedef struct list_item node; //create list from already sorted file, runonce node *create(node *record, FILE *input) { struct item_type item; while ((fscanf(input, "%s %d", item.name, &item.score)!=EOF)) { record->item=item; //copy item to current node record->next=(node *)malloc(sizeof(node)); //allocate space for next node if (!record->next) break; //stop adding.. it's end create(record->next, input); //create next node } record->next=0; return record; } //display linked list void display(node *record) { printf("%s %d\n", record->item.name, record->item.score); if (record->next) display(record->next); return; } //add to sorted list and sort node *create2(node *start, FILE *input) { node *tmp=start, *newitem, *tmp2; struct item_type item; while (fscanf(input, "%s %d", item.name, &item.score)!=EOF) { newitem=(node *)malloc(sizeof(node)); newitem->item=item; newitem->next=0; if (tmp->item.score>=item.score) { //to the beginning newitem->next=start; start=newitem; } else { //find where to put it tmp2=start; //init values.. in fact start searching from head->next tmp=start->next; while (tmp&&tmp->item.scorenext; } tmp2->next=newitem; //link prev with new newitem->next=tmp; //link new with fol } tmp=start; } return start; } //free linked list void exit_func(node *record) { if (record->next) exit_func(record->next); free(record); return; } void main(int argc, char *argv[]) { FILE *input; node *start=(node *)malloc(sizeof(node)); int i; asm mov ax,0x03; asm int 0x10; for (i=1; i