vladafmatf bg ac rs Povezane strukture podataka Poludinamike
vladaf@matf. bg. ac. rs Povezane strukture podataka (Poludinamičke i dinamičke strukture podataka) 1/10
vladaf@matf. bg. ac. rs Jednostruko povezane liste - skup čvorova povezanih pokazivačima u jednom smeru. - svaki čvor je strukturna promenljiva - lista može da sadrži promenljiv broj čvorova typedef struct cvor_st { pocetakliste struct cvor_st *sledeci; /*. . . */ } JCVOR; pocetak tekuci JCVOR pocetakliste, *pocetak, *tekuci; OPŠTI OBLIK JEDNOSTRUKO POVEZANE LISTE pocetakliste . . . tekuci 2/10
vladaf@matf. bg. ac. rs Operacije nad listom - umetanje čvora u povezanu listu - brisanje tekućeg čvora iz liste - pristup čvoru radi čitanja i upisa novi = (JCVOR *)malloc(sizeof(JCVOR)); novi tekuci novi->sledeci = tekuci->sledeci; novi tekuci->sledeci = novi; novi tekuci 3/10
vladaf@matf. bg. ac. rs JCVOR * umetni_cvor(JCVOR *listp) { JCVOR *novi; novi = (JCVOR *)malloc(sizeof (JCVOR)); if (novi != NULL); { novi->sledeci = listp->sledeci; listp->sledeci = novi; } return novi; } void brisi_cvor(JCVOR *listp) { JCVOR *priv; priv = listp->sledeci; listp->sledeci = listp->sledeci; free (priv); } 4/10
vladaf@matf. bg. ac. rs Ciklične jednostruko povezane liste pocetak->sledeci = pocetak; 5/10
vladaf@matf. bg. ac. rs Upravljanje memorijom /* * strdup. c * * Napravi bafer odgovarajuce velicine i kopiraj u njega znakovni niz. */ #include <stdio. h> #include <stdlib. h> #include <string. h> char * strdup(const char *niz) { char *novi; novi = (char *)malloc(strlen(niz) + 1); return novi == NULL ? novi : strcpy(novi, niz); } int main () { char niz [] = "Probni niz!"; char *novi; printf ("n. Pocetni niz : %s", niz); novi = strdup (niz); printf ("n. Duplirani niz: %s", novi); return EXIT_SUCCESS; } 6/10
vladaf@matf. bg. ac. rs Primer: kartoteka 7/10
vladaf@matf. bg. ac. rs Dvostruko povezane liste typedef struct dcvor_st { struct dcvor_st *sledeci, *prethodni; /*. . . */ } DCVOR; DCVOR pocetakliste, *pocetak, *tekuci; OPŠTI OBLIK DVOSTRUKO POVEZANE LISTE pocetakliste . . . tekuci 8/10
vladaf@matf. bg. ac. rs DCVOR * umetni_dcvor(DCVOR *listp) { DCVOR *novi; novi = (DCVOR *)malloc(sizeof (DCVOR)); if (novi != NULL); { novi->prethodni = listp; novi->sledeci = listp->sledeci; listp->sledeci ->prethodni = novi; listp->sledeci = novi; } return novi; } void brisi_cvor(DCVOR *listp) { listp->prethodni->sledeci = listp->sledeci; listp->sledeci->prethodni = listp->prethodni; free (listp); } 9/10
vladaf@matf. bg. ac. rs Ciklične dvostruko povezane liste CIKLIČNA LISTA pocetak 10/10
- Slides: 10