Ovo je stek
Code:
typedef struct red {
int inf;
sruct red* next;
} CVOR;
void push (CVOR **vrh,int vrednost) {
CVOR *novi;
novi=(CVOR*)malloc(sizeof(CVOR)); // ******
novi->inf=vrednost; // ovo ti je valjda jasno, upisujes vrednost u nov cvor
novi->next=*vrh; // sa ovim vrh nadovezujes na nov cvor
*vrh=novi; // posto je vrh stavljen na kraj novog, sa ovim novi postaje vrh
}
int pop (CVOR **vrh) {
CVOR novi1;
int pod;
if (*vrh==NULL) { // ovo je klasicno pitanje, ako cvor ne postoji, tj. nema nikakvih vrednosti
return -1;} // onda zavrsava
novi1=*vrh; // novi cvor pokazuje na vrh, tj. novi1 i vrh su jedno te isto
pod=(*vrh)->inf; // naravno bez ovog nema smisla raditi dalje :)
*vrh=novi1->next; // vrh moras da sacuvas i zato ga pomeras na kraj novog
free(novi1); // ovim brises samo novi, da nisi uradio onu gore komandu, izgubio bi celu listu
return pod;
}
za red ti treba drugacija push f-ja:
Code:
void push (CVOR **vrh,int vrednost) {
CVOR *novi, *trazi_kraj;
novi=(CVOR*)malloc(sizeof(CVOR)); // ******
novi->inf=vrednost;
// odavde pocinju razlike
trazi_kraj = *vrh;
while (trazi_kraj->next != NULL) // moras da krenes od pocetka da bi pronasao poslednji cvor
trazi_kraj=trazi_kraj->next; // i svaki put setas pokazivac, zato bi bilo zgodno da imas pokazivac koji ce ti uvek govoriti gde je kraj
trazi_kraj->next=novi; // nov cvor stavljas na kraj liste
}
Nisam proveravao da li mi je tacan kod, sad nemam vremena za to