Forum » Programiranje » [C++] Enosmerno povezan seznam
[C++] Enosmerno povezan seznam
mov ax 0x7c0 ::
Zdravo!
Kot že sam naslov pove, začetniško vprašanje... Naredil sem dinamičen enosmerno povezan seznam... Metode(Vstavi(), Isci(), Izpisi(),...), ki se rokujejo z objekti tega razreda so vse implmentirane rekurzivno... Na problem, ki me je nekako presenetil, sem naletel pri metodi Brisi().
In sicer, ko najdem element kateri se brise, imam kazalec samo na naslednji element... rabil pa bi tudi kazalec na element, ki je pred brisanim elementom... nočem pa nobenih indeksov ali pa while zank v tej metodi, zanima me, če se da to rešiti z rekurzijo, da ko se pogoj rekurzije pomakne proti koncu seznama, si nekako moram zapomniti stanje, ki je bilo pred izvedbo rekurzivnega klica...
no še koda ki jo imam do sedaj(za metodo Brisi()):
Prosim, če ima kdo kako idejo, naj mi pomaga.
lp
Kot že sam naslov pove, začetniško vprašanje... Naredil sem dinamičen enosmerno povezan seznam... Metode(Vstavi(), Isci(), Izpisi(),...), ki se rokujejo z objekti tega razreda so vse implmentirane rekurzivno... Na problem, ki me je nekako presenetil, sem naletel pri metodi Brisi().
In sicer, ko najdem element kateri se brise, imam kazalec samo na naslednji element... rabil pa bi tudi kazalec na element, ki je pred brisanim elementom... nočem pa nobenih indeksov ali pa while zank v tej metodi, zanima me, če se da to rešiti z rekurzijo, da ko se pogoj rekurzije pomakne proti koncu seznama, si nekako moram zapomniti stanje, ki je bilo pred izvedbo rekurzivnega klica...
no še koda ki jo imam do sedaj(za metodo Brisi()):
void seznam::Brisi(int it){ if(seznam::Isci(it)){ if(seznam::VrniZacetek()->VrniPodatek() == it){ vozlisce* tmp = seznam::VrniZacetek(); seznam::SpremeniZacetek(tmp->VrniNaslednje()); tmp->SpremeniNalsednje(NULL); delete tmp; } else seznam::Brisi(it, seznam::VrniZacetek()); } else{ cout <<"Podatka "<<it<<" ni v senamu..."<<endl; cout <<"Brisanje spodletelo..."<<endl; } } void seznam::Brisi(int it, vozlisce* v){ if(it == v->VrniPodatek()){ //tukaj rabim kazalec na element pred elementom it } else{ seznam::Brisi(it, v->VrniNaslednje()); } }
Prosim, če ima kdo kako idejo, naj mi pomaga.
lp
Vsak dan nekaj novega :)
OwcA ::
Čemu uporabljaš same statične metode? S tem rahlo zbledi smisel objektnega programiranja.
P.S. v C je zanka skoraj vedno učinkovitejša rešitev kot rekurzija
P.S. v C je zanka skoraj vedno učinkovitejša rešitev kot rekurzija
Otroška radovednost - gonilo napredka.
mov ax 0x7c0 ::
@OwcA ne uporabljam statičnih metod... ali ni statična metoda tista ki ima preddoločilo static?
Vsak dan nekaj novega :)
NoUse4AName ::
Zakaj pri bogu bi pa rad imel rekurzijo? Težje je kodo prebrat in še počasneje laufa.
Drugače je pa rešitev preprosta (ampak nobena od rešitev ni lepa zaradi rekurzije) ali imaš razredno spremenljivko ki vedno kaže na enega prej, ali pa dodaš eno privatno metodo, ki jo kličeš iz javne metoda, ki se bo v resnici rekurzivno sprehajala in bo imela dva parametra, tisti v katerega se premikaš in un pred njim.
Drugače je pa rešitev preprosta (ampak nobena od rešitev ni lepa zaradi rekurzije) ali imaš razredno spremenljivko ki vedno kaže na enega prej, ali pa dodaš eno privatno metodo, ki jo kličeš iz javne metoda, ki se bo v resnici rekurzivno sprehajala in bo imela dva parametra, tisti v katerega se premikaš in un pred njim.
NoUse4AName ::
owca v razredni metodi lahko kličeš druge razredne metode kot da so statične, torej ime_razreda::ime_metode. Tudi sam nisem vedel in sem šel sprobat. Saj noben ne proramira tak .
NoUse4AName ::
Aja še tretja rešitev, ki je malo lepša (vsaj na zunaj). Statična spremenljivka v metodi ki vedno kaže na element prej.
NoUse4AName ::
Katera rešitev je elegantna in katera ne je precej očitno. Če si zadovoljen z vsako rešitvijo, samo da dela, boš hitro zašel v težave (z količino kode).
64202 ::
Ce je program dovolj velik in ce ne pazis na lepoto, bo slej ko prej nehal delovati :)
I am NaN, I am a free man!
mov ax 0x7c0 ::
No, zadevo sem enostavno rešil. Razlog v tem zakaj hočem rekurzijo in ne zanke je da sem z zankami to stvar že implementiral.... Drugače pa moram rečti, da je rekurzivna implementacija meni osebno bolj berljiva...
lp
lp
Vsak dan nekaj novega :)
lebdim ::
sicer je tema že stara, ampak mogoče bi bilo smiselno tu uporabiti dvojno povezavni seznam, se pravi da imaš kazalec tako na prejšnji kot na naslednji element seznama, ki bi bil v tem primeru dvosmeren ...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C++] Iskalno drevo implementacijaOddelek: Programiranje | 2272 (1830) | eXoo |
» | Za programerske teoretikeOddelek: Programiranje | 8797 (5599) | Jerry000 |
» | [c++]SeznamOddelek: Programiranje | 2658 (2658) | Gundolf |
» | [C++] Linker errorOddelek: Programiranje | 1286 (1286) | Quikee |
» | [JAVA] rekurzivni izpis seznama z kazalciOddelek: Programiranje | 1774 (1532) | l0g1t3ch |