Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa brisanjem stabla

[es] :: C/C++ programiranje :: Problem sa brisanjem stabla

[ Pregleda: 3929 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vladab
Vladimir Bašanović
Beograd

Član broj: 9512
Poruke: 498
195.252.106.*



Profil

icon Problem sa brisanjem stabla27.02.2005. u 23:31 - pre 232 meseci
Imam funkciju koja brise stablo i koja nece da se iskompajlira:
Code:
int btree::obrisi(){
    drvo *next=koren;
    stack<drvo*> stek;
    while (NULL!=next){
        stek.push(next);
        next=next->levo;
    };
    while (!stek.empty()){
        next=stek.pop();// ******ovde je greska koju ne razumem*****
        if (next>0){
            stek.push(-next); 
            next=next->desno;
            while (next!=NULL){
                stek.push(next);
                next=next->levo;
            };
        }
        else{
            next=-next; //
            delete next;
            }
    }


Greska je : void value not ignores as it ought be
Sta to znaci?
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.bos.east.verizon.net.



+6 Profil

icon Re: Problem sa brisanjem stabla28.02.2005. u 00:30 - pre 232 meseci
Funkcija pop() ne vraća vrednost, odnosno deklarisana je kao void. Pogledaj definiciju šablon klase std::stack.

U principu, moraćeš da koristiš funkciju top() da dobiješ element, pa onda pop() da ga izbrišeš sa steka. Slažem se da je malo čudno, ali tako je...
 
Odgovor na temu

vladab
Vladimir Bašanović
Beograd

Član broj: 9512
Poruke: 498
195.252.106.*



Profil

icon Re: Problem sa brisanjem stabla28.02.2005. u 00:37 - pre 232 meseci
Resio sam, ali vidim da me je DT pretekao sa odgovorom. Hvala!
Ako moze jos jedno pitanje: Ovaj red:
Code:
next=-next;
Zasto to ne radi? zasto pokazivac ne moze da bude negativan. Resio sam problem, ali mi deluje kao strasno lose resenje :
Code:
temp = -(int)next;
next=(drvo*)temp;

Imam utisak da se ovde nesto gubi, mada za sada ne primecujem, posto program radi.
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl.

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Problem sa brisanjem stabla28.02.2005. u 09:32 - pre 232 meseci
Citat:
Zasto to ne radi? zasto pokazivac ne moze da bude negativan. Resio sam problem, ali mi deluje kao
Pokazivač nije broj, pa ne možeš da očekuješ da s njim rade aritmetičke operacije. To što igrom slučaja se pointeri na tvojoj konkretnoj mašini prikazuju kao brojevi nema nikakvog značaja.

Ne možeš sabirati pointere niti ih oduzimati, osim naravno ako ne preopteretiš operatore. Možeš da sabereš pointer sa celim brojem i tada je semantika: p + i == p[ i ]. (pretpostavi da je p pointer a i ceo broj).

Pošto nisi napisao koja se greška javlja ne mogu ništa više da iskomentarišem.

f
 
Odgovor na temu

vladab
Vladimir Bašanović
Beograd

Član broj: 9512
Poruke: 498
*.yubc.net.



Profil

icon Re: Problem sa brisanjem stabla28.02.2005. u 11:08 - pre 232 meseci
Citat:
filmil:To što igrom slučaja se pointeri na tvojoj konkretnoj mašini prikazuju kao brojevi nema nikakvog značaja.

Pošto nisi napisao koja se greška javlja ne mogu ništa više da iskomentarišem.
f

Sasvim dovoljno. Zanima me samo da li ce da radi onaj kod koji sam postavio, ako umesto
Code:
next=-next;
stavim
Code:
temp = -(int)next;
next=(drvo*)temp;

 
Odgovor na temu

_Super_Ellite_Bug_
Novi Sad, konacno!!!

Član broj: 41318
Poruke: 145
*.nat-pool.nsad.sbb.co.yu.

Sajt: www.searchlores.org


Profil

icon Re: Problem sa brisanjem stabla28.02.2005. u 11:29 - pre 232 meseci
Nad pointerima istog tipa koji ukazuju na isti niz moze biti izvedena operacija utvrdjivanje distance u trenutnom memorijskom modelu kao ptrdiff_t tip:
Code:

int niz[10], *q = niz, *r = niz+10;
ptrdiff_t diff1 = q-r, diff2 = r-q;  

//kao rezultate(distance) imacemo :diff1== -10, diff2 = +10
ISO/IEC JTC1/SC22/WG14-ISO/IEC 9899:1999
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl.

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Problem sa brisanjem stabla28.02.2005. u 11:46 - pre 232 meseci
Citat:
Sasvim dovoljno. Zanima me samo da li ce da radi onaj kod koji sam postavio, ako umesto
bug je napisao, ali nije naglasio: pointerska aritmetika ima smisla samo ako pointeri pokazuju na isti niz. U bilo kom drugom slučaju rezultat je nedefinisan. (Mislim da ovaj uslov ima veze i sa uslovom kog postavlja C, da elementi nizova moraju da budu smešteni u uzastopne memorijske lokacije.) To uključuje i slučajeve tipa p[-1] itd.

Ako dobro poznaješ mašinu na kojoj radiš, možeš da kroz konverzije isforsiraš da ti kod radi ono što si hteo, ali će to onda raditi samo na tvojoj mašini. Možda je bolje da opišeš šta u stvari želiš da postigneš, mora da postoji neki manje „bodljikav“  način da se uradi. (Verovatno stoji u kodu, nisam gledao, sorry.)

f
 
Odgovor na temu

vladab
Vladimir Bašanović
Beograd

Član broj: 9512
Poruke: 498
195.252.106.*



Profil

icon Re: Problem sa brisanjem stabla28.02.2005. u 16:00 - pre 232 meseci
Ovo je kod za obilazak (brisanje) stabla u postorderu. Treba da svaki cvor stavim na stek 2 puta. Taj cvor posecujem samo jednom, kada ga drugi put uzimam sa steka. Da bih razlikovao ta dva slucaja, stavio sam da u drugom stavljanju na stek pokazivac bude negativan. Tako su me ucili, ali u pseudo kodu. :O) Zanima me da li je ovo ispravno!
 
Odgovor na temu

[es] :: C/C++ programiranje :: Problem sa brisanjem stabla

[ Pregleda: 3929 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.