[ stale85 @ 16.05.2003. 00:59 ] @
| Posto trenutno citam knjigu C++ za linux i cisto radi vezbe sam
napisao kod koji je u stvari povezana lista, sa cvorom koji sadrzi
celobrojne podatke. Imam Head cvor i Tail cvor koji su neka vrsta
ogranicavaca. Iz klase Node su izvedene Head(bez podataka), Tail(bez
podataka), InternalNode(sa podacima). Ovo je naravno skolski primer
jednosmerne povezane liste. Program se kompajlira ali u
toku izvrsavanja programa on pri unosu podataka u listu se zablokira.
Dacu vam onaj deo koda koji se izvrsava do prekida. Posto nemam bas
mnogo iskustva u programiranju, nemogu da nadjem gresku ma koliko se
trudio.
ll.InsertNode(value); // Objekat Klase List poziva funkciju za unosenje
//podataka iz main funkcije
void List::InsertNode (int value)
{
itsHeadNode->InsertNode(value);//Objekat Klase Head poziva funkciju
za //unosenje podataka
}
Node* HeadNode::InsertNode (int value)
{
itsNext = itsNext->InsertNode(value); //itsNext je pointer na sledeci
//Node u listi
return this;
}
Node* InternalNode::InsertNode (int value)
{
if (value >= itsValue)
{
Node* bigNode= new InternalNode (value, this);
return bigNode;
}
else
{
itsNext = itsNext->InsertNode(value);
return this;
}
}
InternalNode::InternalNode (int value, Node* next)
itsNext(next),
itsValue(value)
{}
|
[ leka @ 16.05.2003. 17:07 ] @
Aploaduj sors molim te, jer ovu sumu znakoga ne mogu da gledam - bole me oci...
[ stale85 @ 16.05.2003. 23:40 ] @
Ovde je upload!
[Ovu poruku je menjao stale85 dana 17.05.2003. u 10:20 GMT]
[ leka @ 17.05.2003. 01:02 ] @
"Stanislave..." (Ako si gledao Radovana III)
Kad sam mislio na upload, mislio sam da sors zapakuješ u .zip i PRILEPIŠ uz onu tvoju (prvu) poruku! :)
Evo gledah ovo malo, sa listama se ovako ne radi u praksi (ili ja nemam pojma o osnovnim strukturama podataka).
Recimo TailNode je, po meni, totalno nepotrebna klasa, jer uglavnom u implementaciji jednostruko ili dvostruko povezanih listi programer unapred ima u vidu da će krajnji čvorovi imati pokazivač "next" koji referiše NULL, jel tako?
Ali, da ne skrećem sa teme, ovu raspravu možemo da sprovedemo kasnije, kad pronađemo problem u tvom kodu. Da bismo to odradili što pre molim te prilepi kod, da budem iskren mrzi me da se mučim sa GNU ident-om da od ove "šume" dole imam u svom editoru lako čitljiv kod. :)
Hajde pa se čitamo...
[ -zombie- @ 17.05.2003. 01:19 ] @
e leko, postao si aljkav.. ;)
samo citiraj poruku, i dobićeš indentovan kod..
[ t3chX @ 17.05.2003. 01:31 ] @
TailNode ne bi ni trebala biti klasa nego samo jedan od clanova linkedlist.h (pointer).
U samom node.h treba da postoji deklarisana dva pointera data i next. Data bi trebala da bude templejtovanog tipa, a next uvek da pokazuje na NULL u samom konstruktoru.
Sto se tice linkedlist.h, tail bi trebalo da bude pointer na zadnji node u listi, a head na prvi (logicno?!).
Za dodavanje, mozda metod append() ...
Za ubacivanje elemenata negde u listu (citaj SREDINU) trebalo bi da je predjes celu sa dva pointera, recimo currNode i nextNode, pa gledaj na osnovu cega ubacujes node ... (moze biti recimo prioritet).
Enivej, ovo su elementarne stvari stvarno ...
[ leka @ 17.05.2003. 01:54 ] @
T3chX, jesu elementarne, ali neko ni njih ne zna (dok ih ne nauči) :)
Elem Stanislave kućo, objasni ovo parče koda - nešto ga ne razumem baš najboljšije, a ako ga dobro razumem, onda mislim da "u tom zecu leži grm".
Code:
Node *
HeadNode::InsertNode (int value)
{
itsNext = itsNext->InsertNode (value);
return this;
}
[ stale85 @ 17.05.2003. 10:19 ] @
ItsNext je pointer na sledeci objekat u listi. On poziva funkciju InsertNode koja za argument ima celobrojnu vrednost i vraca pointer na objekat tipa Node. HeadNode ne bi trebao da vraca vrednost ali to radi samo zato sto se izvodi iz apstraktne klase Node i ako taj metod ne bi zaobisao i on sam bi postao apstraktna klasa i ne bi mogao da pravim objekat tipa HeadNode(tako je uradjeno u primeru u knjizi). Mene zanima da li je "itsNext = itsNext->InsertNode(value);" regularno dodeljivanje. Ja pretpostavljam da jeste jer se kompajler nije bunio.
[ leka @ 17.05.2003. 21:34 ] @
Iz "perspektive" kompajlera taj kod je regularan i zato se kompajler ne buni, medjutim taj kod mislim da je pogresan, hajde pronadji zasto. Ili ako si siguran, dokazi da je kod ispravan/korektan.
[ stale85 @ 17.05.2003. 23:46 ] @
Izmenio sam sve kao sto ste mi rekli i sve je lepo proradilo.
Hvala vam na trudu i pomoci.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.