/* Elemendi kustutamine, mille infovälja väärtus on "arv" * Moodustatakse ahel arvudest * Kasutaja sisestab otsitava väärtuse * Programm otsib ja kui leiab väärtuse "arv", siis kustutab ahelast vastava elemendi. */ #include /* Järgnevalt on näha C-keele võimalus uute andmetüüpide kirjeldamiseks * Võtmesõna on typedef ja kirjeldatava andmetüübi nimi on viit * Uut andmetüüpi viit kasutatakse edaspidi uute muutujate deklareerimiseks */ typedef struct element *viit; struct element { int info; viit next; }; main(){ viit head, node, curr, prev; int arv; /* Järgneva ahela loomis tsükkel peaks olema tuttav eespool olevatest näidetest */ head = NULL; printf("Sisesta arv! (Lõpetamiseks 0)"); scanf("%d",&arv); while (arv != 0){ node = malloc(sizeof *node); node->next = head; node->info = arv; head = node; printf("Sisesta arv! (Lõpetamiseks 0)"); scanf("%d",&arv); } printf("Millist arvu otsime >"); scanf("%d",&arv); curr = head; prev = NULL; /* Järgnevat tsüklit võib kasutada vaid juhul, kui loogikaavaldisi arvutatakse osaliselt * st kui peale esimese poole arvutamist on lõpptulemus selge, siis edasi ei arvutata. * Vastasel juhul tekib peale viimase elemendi kontrollimist viga. * Tsükkel töötab niikaua, kuni viit curr on otsitava elemendi peal ja prev sellele eelneval elemendil * Vaata ka programmi ahelast_kustutamine_ver2.c */ while (curr != NULL && curr->info != arv) { prev = curr; curr = curr->next; } if (curr != NULL) { //Leiti otsitava väärtusega element if (prev == NULL) { //Kustutamine algusest head = head->next; } else { prev->next = curr->next; //Kustutamine keskelt või lõpust } free(curr); } else { //Otsitav element puudub printf("Selline element puudub\n"); } printf("Peale kustutamist on ahel järgmine:\n"); /* Tuttav väljatrükkimise tsükkel */ curr = head; while (curr != NULL) { printf("%d\n", curr->info); curr = curr->next; } getch(); }