[quote="Incognito"]Piše ovako:
typedef struct cell_tag {
elementtype element;
struct cell_tag *next;
} celltype;
Što je sad tu ime te strukture? Kako se cell_tag koristi u strukturi cell_tag? Je li to možda pokazivač na takvu istu strukturu (ćeliju)?[/quote]
Ime tipa podatka (strukture) je "struct cell_tag". Ovdje se napravio i automatski "typedef" cime se definiralo da ce se struktura imena "struct cell_tag" (koja je definirana unutar viticastih zagrada) zvati "celltype". Dakle, gdje god bi ti definirao [code:1]struct cell_tag varijabla;[/code:1] mozes to definirati i kao [code:1]celltype varijabla;[/code:1] To je napravljeno zato da ti skrati pisanje i da ti omoguci da das neko smislenije ime tom svom tipu podatka.
cell_tag se koristi unutar sebe samoga kao pokazivac. Time zapravo ostvarujes vezanu listu...ti unutar jedne strukture imas pokazivac na jos jednu takvu istu (istu po "strukturi" podataka, a ne istu po sadrzaju) strukturu.
[quote="Incognito"]Dalje piše:
typedef celltype *LIST;
typedef celltype *position;
Što su to sad? Pokazivači na onu gore strukturu imena LIST i position?[/quote]
Ovdje se definira da je "LIST" drugo ime za tip podatka "celltype *", a posto je "celltype" vec definiran kao drugo ime za "struct cell_tag", to ti je "LIST" zapravo "struct cell_tag *". Dakle, kada napises [code:1]LIST lista;[/code:1] to ti je kao da si napisao [code:1]struct cell_tag *lista;[/code:1] Ista stvar je za "position". Gdje god pises "position", isto ti je kao da si napisao "celltype *", a to ti je kao da si napisao "struct cell_tag *".
Dakle, ti ovdje nisi definirao varijablu koja se zove LIST i koja je pointer na "celltype" nego si definirao da je LIST tip podatka koji je zapravo "celltype *". Tome sluzi "typedef". Opet, to se uvodi radi kraceg i smislenijeg zapisivanja.
[quote="Incognito"]I dalje:
position END(LIST L) {
position q;
q=L;
while (q->next != NULL)
q=q->next;
return q;
}
Kao što se tu koriste LIST i position, kao kakav tip? I ako bi netko mogao malo pojasniti kako točno djeluje strelica ->, zaboravio sam. :?[/quote]
Mislim da ti je u gornjem dijelu objasnjeno prvo pitanje.
Strelica ti djeluje ovako:
[code:1]pointer->varijabla[/code:1] ti je isto kao [code:1](*pointer).varijabla[/code:1]
Dakle, "q->next" ti je isto kao da si pisao "(*q).next".
Incognito (napisa): | Piše ovako:
typedef struct cell_tag {
elementtype element;
struct cell_tag *next;
} celltype;
Što je sad tu ime te strukture? Kako se cell_tag koristi u strukturi cell_tag? Je li to možda pokazivač na takvu istu strukturu (ćeliju)? |
Ime tipa podatka (strukture) je "struct cell_tag". Ovdje se napravio i automatski "typedef" cime se definiralo da ce se struktura imena "struct cell_tag" (koja je definirana unutar viticastih zagrada) zvati "celltype". Dakle, gdje god bi ti definirao Kod: | struct cell_tag varijabla; | mozes to definirati i kao To je napravljeno zato da ti skrati pisanje i da ti omoguci da das neko smislenije ime tom svom tipu podatka.
cell_tag se koristi unutar sebe samoga kao pokazivac. Time zapravo ostvarujes vezanu listu...ti unutar jedne strukture imas pokazivac na jos jednu takvu istu (istu po "strukturi" podataka, a ne istu po sadrzaju) strukturu.
Incognito (napisa): | Dalje piše:
typedef celltype *LIST;
typedef celltype *position;
Što su to sad? Pokazivači na onu gore strukturu imena LIST i position? |
Ovdje se definira da je "LIST" drugo ime za tip podatka "celltype *", a posto je "celltype" vec definiran kao drugo ime za "struct cell_tag", to ti je "LIST" zapravo "struct cell_tag *". Dakle, kada napises to ti je kao da si napisao Kod: | struct cell_tag *lista; | Ista stvar je za "position". Gdje god pises "position", isto ti je kao da si napisao "celltype *", a to ti je kao da si napisao "struct cell_tag *".
Dakle, ti ovdje nisi definirao varijablu koja se zove LIST i koja je pointer na "celltype" nego si definirao da je LIST tip podatka koji je zapravo "celltype *". Tome sluzi "typedef". Opet, to se uvodi radi kraceg i smislenijeg zapisivanja.
Incognito (napisa): | I dalje:
position END(LIST L) {
position q;
q=L;
while (q->next != NULL)
q=q->next;
return q;
}
Kao što se tu koriste LIST i position, kao kakav tip? I ako bi netko mogao malo pojasniti kako točno djeluje strelica ->, zaboravio sam.  |
Mislim da ti je u gornjem dijelu objasnjeno prvo pitanje.
Strelica ti djeluje ovako:
ti je isto kao Kod: | (*pointer).varijabla |
Dakle, "q->next" ti je isto kao da si pisao "(*q).next".
_________________ ~ Those who fear the Darkness have never seen what the Light can do! ~
|