[ LUGOS ] c++ problemi s kazalci

Jernej Kovše jernej.kovse na uni-mb.si
Čet Jan 7 15:29:04 CET 1999


>On Wed, 06 Jan 1999, you wrote:
>>-----Original Message-----
>
>>Ja, eventuelno mozno, ampak zelo neelegantno. Veliko bolj mi je vsec
linked
>>list.
>>
>>J.
>
>Te ne razumem kaj tocno mislis, lahko tudi bolj konkretno napises...
>


Linked list == povezani seznam.

Recimo, da imas razred MojRazred, zelel pa bi, da so instance (torej objekti
tipa MojRazred) nekako med seboj povezani. Vcasih (recimo, da kar pogosto),
jih je smiselno povezati v povezani seznam. Povezani seznam
je, sestavljen iz elementov seznama, od katerih vsak vsebuje instanco
razreda MojRazred in kazalec na naslednji element. Kazalec je nujen, ker
se z njim lahko premikas po elementih.

Element seznama zgleda torej nekako tako:

struct ElSeznama
{
  MojRazred R;
  ElSeznama *naslednji;
}

Zgornjo definicijo C++ prebavi brez problemov (ne pozabi, da je kazalec
naslednji tipa ElSeznama* in ga definiras znotraj definicije strukture
ElSeznama). Navadni C zna imeti s tem bolj ali manj probleme,
odvisno od prevajalnika.

Taksen povezani seznam nato ustrezno zapres (enkapsuliras) v objekt,
recimo Seznam, nad katerim potem izvajas vstavljanje, dodajanje,
brisanje, izpis elementov itd. Taksen objekt praviloma vsebuje
vsaj en kazalec tipa ElSeznama*, ki kaze na prvi element. Do naslednjih
potem znas priti preko prejsnjih (ne pozabi, da vsak element seznama
vsebuje kazalec na svojega naslednika). V zadnjem elementu seznama
je kazalec na naslednjega navadno enak NULL (recimo, da si lahko
sam zmislis tudi kaksno drugacno konvencijo) in tako tudi ves,
da si na koncu. Povezani seznam je lahko tudi dvosmerni (kjer imas
poleg kazalcev na naslednike tudi kazalce na predhodnike) in
krozno povezani, kjer se z zadnjega elementa seznama preko kazalce
spet vrnes nazaj na prvi element. Vsa stvar je VELIKO bolj fleksibilna kot
polja, ne glede na to, da jih ti ustvarjas dinamicno.

Lp,

J.





Dodatne informacije o seznamu Starilist