12.07.2015 Views

Programski jezik C - Pmf

Programski jezik C - Pmf

Programski jezik C - Pmf

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

12.4. SAMOREFERENTNE STRUKTURE 207}free(tmp->p_ime);free(tmp);return;}}printf("Podatak nije u listi.\n");return;Kod brisanja elementa iz liste prvo provjeravamo da li je lista prazna. Akonije, unosimo ime koje želimo izbrisati i provjeravamo da li je ono na prvommjestu u listi. To radimo stoga što je brisanje elementa na prvom mjestunešto jednostavnije od brisanja proizvoljnog elementa. Dovoljno je samostart postaviti da pokazuje na drugi element: start=start->next. Budućida je memorija za svaki element alocirana dinamički, prilikom brisanja elementatreba ju osloboditi. Stoga se stara vrijednost pokazivača start pamtiu lokalnoj varijabli tmp i memorija se oslobada pozivom funkcije free(tmp).Kod brisanja elementa na proizvoljnom mjestu porebno je imati pokazivačna element koji prethodi elementu za brisanje jer njegov next član trebapreusmjeriti na element iza onog koji brišemo. Stoga u petljifor(test=start; test != KRAJ; test=test->next)provjeravamo pokazuje li tmp=test->next na element za brisanje. Ako da,onda se test->next postavlja na test->next->next, prvi element iza onogkojeg brišemo i time je izvršeno izbacivanje iz liste. Ostaje još samo delociratimemoriju izbrisanog elementa.U ovom kôdu postoji problem zadnjeg elemeta. Ako je test zadnji element,onda je tmp=test->next=KRAJ pa bi tmp->p ime u strcmp funkcijidalo grešku. Stoga tesiramo taj pokazivač i izlazimo iz petlje pomoću breaknaredbe ako smo na zadnjem elementu.Konačno da bismo kompletirali program uvodimo funkciju menu koja ispisujemenu s mogućim operacijamaint menu(void) {int izbor;printf("\n\n\n");

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!