[quote="Anonymous"]NAPISITE FUNKCIJU KOJA KAO ARGUMENT UZIMA POINTER NA POCETAK VEZANE LISTE KOJA SADRZI ZAPISE TIPA BROJEVI A KAO IZLAZ VRACA POINTERE NA POCETKE LISTE PARNIH I LISTE NEPARNIH BROJEVA U ORIGINALNOM(NESORTIRANOM)REDOSLJEDU.NIJE DOZVOLJENO KORISTITI FUNKCIJU ALOCIRAJ NITI MJENJATI SADRZAJ POJEDINIH ZAPISA LISTE.(ZA LISTU 1,4,2,3 VRACA LISTU 1,3 I 4,2)
MOLIM DOBRU DUSU DA MI RJESI OVAJ ZADATAK.TNX[/quote]
Prvo kritika:
[list] [1] naslov topica je _krajnje_ neinformativan i ako ovaj topic vec nece biti obrisan, onda iduci sigurno hoce
[2] tekst posta je usprkos krajnje uobicajenom karakteru postavljenog pitanja sasvim dovoljno dramatican i bez 4 usklicnika u naslovu i.. :roll:
[3] sa lijeve strane velike vecine tastatura postoji tipka na kojoj najcesce pise "Caps Lock" sa kojim mozes birati izmedju velikih i malih slova (neke tastature imaju i indikator u obliku male lampice o tome da li je taj caps lock ukljucen).
[4] ukoliko je tocka [3] u tvojem uhu ucinila uvredljiv prizvuk zbog podcijenjivanja tvoga vlastitog poznavanja kompjutera onda bih ti ipak uputio molbu da se ubuduce obracas ljudima oko sebe u malim slovima, buduci da je a) preglednije i b) u nekim krugovima se smatra nepristojnim buduci da velika slova simboliziraju vikanje/urlanje[/list:u]
Sada na pitanje:
ok, znaci imamo nesortiranu vezanu listu (jednostruko povezanu pretpostavljam, que?) i pretpostavljam da je dozvoljeno barem mijenjanje linkova medju elementima liste?
head cemo zvati pointer na prvi element pocetne liste,
head0 i head1 za parne tj. ne parne brojeve
definiram strukturu:
[code:1]tip tnode {
// zapis broja
int i;
// pointer na iduci clan
tnode *next;
}[/code:1]
ideja algoritma jest da se pocnu formirati lista parnih i lista neparnih brojeva rastavljajuci ukupnu listu brojeva i to tako da:
[code:1]funkcija vrati_liste(tnode *head, tnode **head0, **head1) {
tip *cur, *cur0, *cur1;
*head0=NULL; *head1=NULL;
cur=head;
// imamo petlju koja vrti elemente ukupne liste
while( cur != NULL) {
// ako je trenutacni element paran ....
if( cur->i %2 == 0 ) {
// ubaci ga u listu tako da od stare(ukupne) liste gradis dvije nove (parnu i neparnu)
// to ce unistit staru listu, ali ces kao izlaz dobiti ono sto si trazio,
// vidi dalje kod:
if( head0 == NULL) {
*head0=cur;
cur0=head0;
cur=cur->next;
cur0->next=NULL;
} else {
cur0->next=cur;
cur0=cur;
cur=cur->next;
cur0->next=NULL;
}
// u potpunosti analogno za neparne brojeve
else {
if( head1 == NULL) {
*head1=cur;
cur1=head1;
cur=cur->next;
cur1->next=NULL;
} else {
cur1->next=cur;
cur1=cur;
cur=cur->next;
cur1->next=NULL;
}
}
return
}[/code:1]
I kraj :) nije tako strasno kako izgleda, ima mnogo skoro-pa-identicnih linija, al kljucnih su onih 4 poslije if-a i 4 poslije prvog else-a, tamo treba paziti da se namjesti cur0->next i head0 bez da "ozlijedis" zapis od cur->next :? (uoci da cur=cur->next dolazi _prije_ cur0->next=NULL)
(u slucaju neparnog broja potpuno analogno, tamo di pise 0 napises 1 ;))
sretno sa ispitom i manje nervoze kod postavljanja pitanja (95% problema dobije rijesenje u nekoliko sati, iako _veliku_ prenost imaju ona pitanja u kojima autor objasnjava sto je sve pokusao uciniti da rijesi zadatak i na cemu je zapeo), ako ti nesto nije jasno ili ti nije nacisto kako da to protumacis, samo postavi pitanje. Small caps pliz ;)
DISKLEJMER: unaprijed isprika ako sam fulao pseudojezik koji ste vec koristili na predavanjima buduci da se on mijenja skoro svake godine :? opet, ako nesto nije jasno, javi
Anonymous (napisa): | NAPISITE FUNKCIJU KOJA KAO ARGUMENT UZIMA POINTER NA POCETAK VEZANE LISTE KOJA SADRZI ZAPISE TIPA BROJEVI A KAO IZLAZ VRACA POINTERE NA POCETKE LISTE PARNIH I LISTE NEPARNIH BROJEVA U ORIGINALNOM(NESORTIRANOM)REDOSLJEDU.NIJE DOZVOLJENO KORISTITI FUNKCIJU ALOCIRAJ NITI MJENJATI SADRZAJ POJEDINIH ZAPISA LISTE.(ZA LISTU 1,4,2,3 VRACA LISTU 1,3 I 4,2)
MOLIM DOBRU DUSU DA MI RJESI OVAJ ZADATAK.TNX |
Prvo kritika:
[1] naslov topica je _krajnje_ neinformativan i ako ovaj topic vec nece biti obrisan, onda iduci sigurno hoce
[2] tekst posta je usprkos krajnje uobicajenom karakteru postavljenog pitanja sasvim dovoljno dramatican i bez 4 usklicnika u naslovu i..
[3] sa lijeve strane velike vecine tastatura postoji tipka na kojoj najcesce pise "Caps Lock" sa kojim mozes birati izmedju velikih i malih slova (neke tastature imaju i indikator u obliku male lampice o tome da li je taj caps lock ukljucen).
[4] ukoliko je tocka [3] u tvojem uhu ucinila uvredljiv prizvuk zbog podcijenjivanja tvoga vlastitog poznavanja kompjutera onda bih ti ipak uputio molbu da se ubuduce obracas ljudima oko sebe u malim slovima, buduci da je a) preglednije i b) u nekim krugovima se smatra nepristojnim buduci da velika slova simboliziraju vikanje/urlanje
Sada na pitanje:
ok, znaci imamo nesortiranu vezanu listu (jednostruko povezanu pretpostavljam, que?) i pretpostavljam da je dozvoljeno barem mijenjanje linkova medju elementima liste?
head cemo zvati pointer na prvi element pocetne liste,
head0 i head1 za parne tj. ne parne brojeve
definiram strukturu:
Kod: | tip tnode {
// zapis broja
int i;
// pointer na iduci clan
tnode *next;
} |
ideja algoritma jest da se pocnu formirati lista parnih i lista neparnih brojeva rastavljajuci ukupnu listu brojeva i to tako da:
Kod: | funkcija vrati_liste(tnode *head, tnode **head0, **head1) {
tip *cur, *cur0, *cur1;
*head0=NULL; *head1=NULL;
cur=head;
// imamo petlju koja vrti elemente ukupne liste
while( cur != NULL) {
// ako je trenutacni element paran ....
if( cur->i %2 == 0 ) {
// ubaci ga u listu tako da od stare(ukupne) liste gradis dvije nove (parnu i neparnu)
// to ce unistit staru listu, ali ces kao izlaz dobiti ono sto si trazio,
// vidi dalje kod:
if( head0 == NULL) {
*head0=cur;
cur0=head0;
cur=cur->next;
cur0->next=NULL;
} else {
cur0->next=cur;
cur0=cur;
cur=cur->next;
cur0->next=NULL;
}
// u potpunosti analogno za neparne brojeve
else {
if( head1 == NULL) {
*head1=cur;
cur1=head1;
cur=cur->next;
cur1->next=NULL;
} else {
cur1->next=cur;
cur1=cur;
cur=cur->next;
cur1->next=NULL;
}
}
return
} |
I kraj nije tako strasno kako izgleda, ima mnogo skoro-pa-identicnih linija, al kljucnih su onih 4 poslije if-a i 4 poslije prvog else-a, tamo treba paziti da se namjesti cur0→next i head0 bez da "ozlijedis" zapis od cur→next (uoci da cur=cur→next dolazi _prije_ cur0→next=NULL)
(u slucaju neparnog broja potpuno analogno, tamo di pise 0 napises 1 )
sretno sa ispitom i manje nervoze kod postavljanja pitanja (95% problema dobije rijesenje u nekoliko sati, iako _veliku_ prenost imaju ona pitanja u kojima autor objasnjava sto je sve pokusao uciniti da rijesi zadatak i na cemu je zapeo), ako ti nesto nije jasno ili ti nije nacisto kako da to protumacis, samo postavi pitanje. Small caps pliz
DISKLEJMER: unaprijed isprika ako sam fulao pseudojezik koji ste vec koristili na predavanjima buduci da se on mijenja skoro svake godine opet, ako nesto nije jasno, javi
_________________
Pupoljak nije negiran. Rekao sam to i ponovit cu to jos jedanput. Pupoljak NIJE negirAn.
MADD
(Mothers Against Dirty Dialectics)
Based on a true story. NOT.
Ko ih sljivi, mi sviramo punk
|