next up previous contents
Next: Problema rezolvata Up: Liste liniare simplu înlantuite Previous: Liste liniare simplu înlantuite   Cuprins


Aspecte ale implementarii listelor liniare

O solutie de implementare a listelor liniare este sub forma unei înlantuiri de elemente cu aceeasi structura, aflate în memorie la diverse adrese si legate între ele prin intermediul pointerilor. Scopul utilizarii listelor este de a economisi spatiu de memorie, motiv pentru care se foloseste alocarea dinamica în locul celei statice (utilizata în cazul tablourilor). Accesul la un element al listei se poate face doar secvential, parcurgând elementele aflate înaintea sa în înlantuire.

Pentru a exploata avantajul listelor în ceea ce priveste economia de spatiu de memorie, trebuie acordata o atentie deosebita operatiilor asupra listei. În general, asupra unei liste se pot face operatii de insertie/adaugare de noduri, stergere de noduri si parcurgerea nodurilor.

Pentru a putea folosi o lista, este necesar sa fie retinuta adresa de început a listei (adresa primului nod). Ne vom referi în continuare la aceasta adresa prin pointerul prim.

În cazul parcurgerii listei, operatia este relativ simpla. Cu ajutorul unui pointer auxiliar se pleaca de la prim si se urmareste legatura spre nodul urmator, pointerul auxiliar primind pe rând adresa nodului urmator.

O operatie mai complicata este introducerea unui nod nou în lista. Se disting trei situatii: introducere la începutul listei, introducere la sfârsit si introducere între doua noduri. Dupa alocarea spatiului de memorie necesar noului nod, presupunem ca acesta este referit prin pointerul temp. În figurile 8.1, 8.2 si 8.3 se prezinta cele trei cazuri de adaugare a noului nod. Ordinea operatiilor a fost marcata prin 1, 2, 3.

Figura 8.1: Adaugarea unui nod la începutul listei
\begin{figure}\begin{center}
\epsfig{file=adaugare_inc.eps, height=5cm} \end{center}\end{figure}

Figura 8.2: Adaugarea unui nod la sfârsitul listei
\begin{figure}\begin{center}
\epsfig{file=adaugare_sf.eps, height=5cm} \end{center}\end{figure}

Figura 8.3: Adaugarea unui nod la mijlocul listei
\begin{figure}\begin{center}
\epsfig{file=adaugare_mijl.eps, height=5cm} \end{center}\end{figure}

În situatia stergerii unui nod din lista apar de asemenea cele trei situatii anterior descrise (nod de la începutul, de la sfârsitul sau din mijlocul listei). Principala grija a programatorului în cazul stergerii unui nod trebuie sa fie eliberarea spatiului de memorie alocat nodului care a fost sters si mentinerea integritatii listei (prin stergerea nodului, sa nu se "rupa" lista). În figurile 8.4, 8.5 si 8.6 se prezinta cele trei situatii de stergere.

Figura 8.4: Stergerea unui nod de la începutul listei
\begin{figure}\begin{center}
\epsfig{file=stergere_inc.eps, height=3.5cm} \end{center}\end{figure}

Figura 8.5: Stergerea unui nod de la sfârsitul listei
\begin{figure}\begin{center}
\epsfig{file=stergere_sf.eps, height=4cm} \end{center}\end{figure}

Figura 8.6: Stergerea unui nod de la mijlocul listei
\begin{figure}\begin{center}
\epsfig{file=stergere_mijl.eps, height=3.5cm} \end{center}\end{figure}


next up previous contents
Next: Problema rezolvata Up: Liste liniare simplu înlantuite Previous: Liste liniare simplu înlantuite   Cuprins
Cristian Gavrila 2001-10-02