Professional Documents
Culture Documents
C Strukture Liste
C Strukture Liste
Strukture Strukture
Strukture Strukture
2
Strukture Upotreba struktura
typedef struct {
char dan, mesec; short int godina;
dozvoljena dodela vrednosti (=)
} datum;
za promenljive istog strukturnog tipa
typedef struct {
char maticni_broj[13];
ime osoba; prepiu se sve komponente
datum datum_rodjenja;
char adresa[30];
} gradjanin;
3
Upotreba struktura Upotreba struktura
mogua primena adresnog operatora, kako niz ne moe biti vrednost funkcije,
kao i pokazivai na strukture moe struktura sa nizom kao jednom
komponentom
struct krug *p;
od struktura mogu da se prave nizovi
4
Upotreba struktura Upotreba struktura
/* definisanje tipa Tacka */
/* izraunavanje rastojanja izmeu taaka */
struct tacka {int x,y;};
typedef struct tacka Tacka;
#include <math.h>
5
Dinamike strukture podataka Dinamike strukture podataka
6
Dinamike strukture podataka Dinamike strukture podataka
Unije Unije
naredba union
strukturirani tipovi (sintaksa kao za struct)
koji omoguavaju da se u
isti memorijski prostor struct { union {
smetaju podaci razliitih tipova u int i; int i;
razliitim vremenskim intervalima double d; double d;
char *c; char *c;
} s; } u;
7
Unije Unije
za razliku od strukture,
s: s.i s.d s.c u: u.i u jednom momentu
u.d samo jedna komponenta
u.c ima definisanu vrednost
sizeof s sizeof u
veliina odreena najveom
komponentom
) )
struktura
ije su komponente
programer treba da vodi rauna duine nekoliko bitova
o konzistentnom korienju (pakuju se na mainski zavisan nain)
komponenti
(posledice su nepredvidive esto za opisivanje hardverskih registara
ako se upie u jednu,
a koristi druga komponenta) programi koji koriste polja bitova su
obino mainski zavisni
8
Polja bitova Polja bitova
struct {
lst: 5 3 2 6 5 3 NULL
unsigned int n:1, z:1, prio:4;
} status_reg;
typedef struct elem {
int broj;
status_reg.prio=5; struct elem
*sled;
if (status_reg.n != 1 && } Elem;
status_reg.z != 0) ...
9
Obilazak liste odreivanje Obilazak liste ispisivanje svih
broja elemenata elemenata
Elem *na_pocetak (Elem *lst, int b) { Elem *na_kraj (Elem *lst, int b) {
Elem *tek, *novi = malloc (sizeof(Elem));
Elem *novi = malloc (sizeof(Elem)); novi->broj = b;
novi->sled = NULL;
novi->broj = b;
if (!lst)
novi->sled = lst; lst = novi;
else {
lst = novi; for (tek=lst; tek->sled; tek=tek->sled);
return lst; tek->sled = novi;
}
} return lst;
}
10
Umetanje elementa u rastue
Sortiranje liste metodom izbora
ureenu listu
Izostavljanje elemenata sa
Brisanje svih elemenata liste datom vrednou (1)
Prazna lista i
obilazak liste
Ispisivanje liste u napred
12
Ispisivanje liste u nazad Nalaenje prve pojave broja
Elem *nadji_posl (Lista lst, int b) { void na_pocetak (Lista *plst, int b) {
Elem *tek; Elem *novi = malloc (sizeof(Elem));
novi->broj = b;
for (tek=lst.posl; tek; tek=tek->pret)
novi->sled = plst->prvi;
if (tek->broj == b) return tek; novi->pret = NULL;
return NULL; if (! plst->posl) plst->posl = novi;
} else plst->prvi->pret = novi;
plst->prvi = novi;
}
13
Dodavanje na kraj Brisanje svih elemenata
void izostavi_prvi (Lista *plst, int b) { void izostavi_posl (Lista *plst, int b){
Elem *tek = nadji_prvi (*plst, b); Elem *tek = nadji_posl (*plst, b);
if (tek) { if (tek) {
if (! tek->pret) plst->prvi = tek->sled; if (! tek->pret) plst->prvi = tek->sled;
else tek->pret->sled = tek->sled; else tek->pret->sled = tek->sled;
if (! tek->sled) plst->posl = tek->pret; if (! tek->sled) plst->posl = tek->pret;
else tek->sled->pret = tek->pret; else tek->sled->pret = tek->pret;
free (tek); free (tek);
} }
} }
14