/* Checking 386/387 coupling... Ok, fpu using exception 16 error reporting. Checking 'hlt' instruction... Ok. Linux version 2.0.33 (root@citadel) (gcc version 2.7.2.1) #13 Thu Dec 18 21:59:40 CET 1997 Starting kswapd v 1.4.2.2 ... 3. Vjezba Ancenivgv shaxpvwr mn enq f herqwrabz wrqabfgehxb cbirmnabz yvfgbz fgehxghen h enqabw zrzbevwv (qbqninawr, genmrawr, oevfnawr, vfcvf). Fgehxgheh mncvfn v qvb mncvfn xbwv cerqfgniywn xywhp qrsvavengv cb ibywv. Ancvfngv cbgcebtenzr mn vmzwrah xywhpn ryrzragn yvfgr hm bphinawr herqwrawn: n) mnzwrabz fnqemnwn ryrzrangn o) hcbenobz shaxpvwn mn oevfnawr v qbqninawr ryrzragn H tyniabz cebtenzh geron xervengv herqwrah yvfgh cbqngnxn cergubqab cbuenawravu h fyvwrqabw sbezngvmvenabw qngbgrpv, n mngvz vagrenxgviab genmvgv ryrzragr v zvwrawngv ievwrqabfg xywhpn hm cebiwreh fnqemnwn yvfgr. Qbqngnx: Cevyntbqvgv cbqngxbiar fgehxgher v ancvfngv cbgcebtenz xbwv cbfgbwrph yvfgh, hm bfabiav xywhp, herqwhwr cb arxbz qehtbz xywhph (yvfgn f ivfr xywhprin). citadel:~/tmp $ who % 20:44 kreator tty1 Dec 31 06:01 kreator tty2 Dec 31 06:02 root tty3 Dec 31 07:44 citadel:~/tmp $ date % 20:44 Wed Dec 31 20:44:54 CET 1997 no comment.. huh? :) /* #include #include struct data_type { char name[14+1]; int id; }; typedef struct data_type data; struct node_type { data element; struct node_type *next_id, *next_name; }; typedef struct node_type node; node *add_id(node *head, data element) { node *newnode=(node *)malloc(sizeof(node)), *tmp, *tmp_prev; if (!newnode) exit(0); newnode->element=element; //try to turn this reverse and you'll get SEGV :) if (!head || head->element.id>=element.id) { newnode->next_id=head; head=newnode; } else { tmp_prev=head; tmp=head->next_id; while (tmp && tmp->element.idnext_id; } tmp_prev->next_id=newnode; newnode->next_id=tmp; } return head; } node *add_name(node *head, node *newnode) { node *tmp, *tmp_prev; if (!head || strcmp(head->element.name, newnode->element.name)>0) { newnode->next_name=head; head=newnode; } else { tmp_prev=head; tmp=head->next_name; while (tmp && strcmp(tmp->element.name, newnode->element.name)<0) { tmp_prev=tmp; tmp=tmp->next_name; } tmp_prev->next_name=newnode; newnode->next_name=tmp; } return head; } node *search_id(node *head, data element) { node *tmp; for(tmp=head; tmp; tmp=tmp->next_id) if (tmp->element.id==element.id) return tmp; return 0; } node *delete_id(node *head_id, data element) { node *tmp, *tmp_prev; if (tmp=search_id(head_id, element)) { if (tmp==head_id) { tmp_prev=head_id->next_id; head_id=tmp_prev; } else { for(tmp_prev=head_id; tmp_prev->next_id!=tmp; tmp_prev=tmp_prev->next_id); tmp_prev->next_id=tmp->next_id; } free(tmp); } return head_id; } node *delete_name(node *head_id) { node *tmp; for(tmp=head_id; tmp; tmp=tmp->next_id) tmp->next_name=0; return 0; } void display(node *head_id, node *head_name) { node *tmp; tmp=head_id; puts("sort by id"); while(tmp) { printf("%d %s\n", tmp->element.id, tmp->element.name); tmp=tmp->next_id; } puts("\nsort by name"); tmp=head_name; while(tmp) { printf("%d %s\n", tmp->element.id, tmp->element.name); tmp=tmp->next_name; } } int main(void) { FILE *input; data element; node *head_id=0, *head_name=0, *tmp; if (!(input=fopen("input","rt"))) exit(0); while (fscanf(input, "%d %s", &element.id, element.name)!=EOF) head_id=add_id(head_id, element); tmp=head_id; while(tmp) { head_name=add_name(head_name, tmp); tmp=tmp->next_id; } display(head_id, head_name); puts("enter id to delete"); scanf("%d", &element.id); puts(""); head_id=delete_id(head_id, element); head_name=delete_name(head_id); tmp=head_id; while(tmp) { head_name=add_name(head_name, tmp); tmp=tmp->next_id; } display(head_id, head_name); return 1; }