[ Sifrara @ 24.01.2010. 02:41 ] @
Da li neko moza da mi ukratko pojasni sta je to red i kako se ubacuju elemnti na kraj a izbacuju sa pocetka,ako nije problem moze neki najprostiji primer sa kodom... |
[ Sifrara @ 24.01.2010. 02:41 ] @
[ GORSHTAK @ 24.01.2010. 17:03 ] @
Jel misliš na jednostruko povezane liste?
Evo nečeg u tom slučaju Code: typedef struct lista{ int broj; struct lista* sledeci; } Lista; Lista *pocetak, *kraj, *novi, *za_brisanje; // .......... // dodavanje na kraj kraj->sledeci = novi; kraj = novi; // brisanje prvog za_brisanje = pocetak; pocetak = pocetak->sledeci; free(za_brisanje); Pročitaj ovo dole, ukratko, red je princip da prvi element koji se pojavi u memoriji bude prvi obrađen (FIFO), suprotno je stek http://en.wikipedia.org/wiki/Stack_(data_structure) http://en.wikipedia.org/wiki/Queue_(data_structure) prekopiraj celu liniju, nije mi pošlo za rukom da cela linija uđe u url [ Sifrara @ 24.01.2010. 17:54 ] @
Evo npr..Mozes li da mi opises ukratko svaki kod..
typedef struct red { int inf; sruct red* next; } CVOR; void push (CVOR **vrh,int vrednost) { CVOR *novi; novi=(CVOR*)malloc(sizeof(CVOR)); // do ovoga sve kapiram novi->inf=vrednost; novi->next=*vrh; *vrh=novi; } int pop (CVOR **vrh) { CVOR novi1; int pod; if (*vrh==NULL) { return -1;} novi1=*vrh; *vrh=novi1->next; free(novi1); return pod; } [ Sifrara @ 24.01.2010. 17:55 ] @
Jos sam zaboravio da stavim kop pop funkcije da je pod=(*vrh)->inf;
[ GORSHTAK @ 25.01.2010. 12:15 ] @
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 Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|