Sunteți pe pagina 1din 4

-- Liste dublu inlantuite.

1 --

E.Kalisz - Structuri de date

Liste dublu nlnuite


Celulele din list au dou cmpuri legtur:
pre adresa celulei predecesoare
urm adresa celulei urmtoare

pre urm
info
Pentru parcurgerea eficient a listei n oricare din
cele dou sensuri (de la nceput sau de la sfrit)
este necesar accesul la cele dou extremiti.

-- Liste dublu inlantuite.2 --

E.Kalisz - Structuri de date

Liste dublu nlnuite deschise


prim ultim

prim ultim

.....

lista vida

lista nevida
Se observ c n aceast abordare exist
diferene de tratare n cazul modificrilor (inserare /
eliminare) la extremiti, deoarece acestea
efecteaz fie cmpul prim, fie cmpul ultim.

-- Liste dublu inlantuite.3 --

E.Kalisz - Structuri de date

Liste dublu nlnuite circulare


Pentru o tratare uniforma se poate adopta soluia
de organizare ca list circular cu santinel.

s
...

////

en

////

e1

en-1

lista vida
lista nevida
Cmpul info al celulei santinel poate fi utilizat pentru
pstrarea adresei sau valorii unor informaii cu caracter
general, cum ar fi referina la funcia de verificare a relaiei
de ordine n cazul n care elementele din list sunt ordonate.

-- Liste dublu inlantuite.4 --

E.Kalisz - Structuri de date

Liste dublu nlnuite circulare


Test list vid:
(s->urm == s)

sau

(s->pre == s)

Atenie! Expresia
(s->urm == s->pre)
are valoarea 1 i n cazul listei cu un singur element.

////

////

lista vida

e1

lista c u un ele ment

-- Liste dublu inlantuite.5 --

E.Kalisz - Structuri de date

Parcurgerea listei dublu nlnuite circulare


- de la nceput
for (x = s->urm; x != s; x = x->urm)
{. . . .}

...
////

e1

e2

en

- de la sfrit
for (x = s->pre; x != s; x = x->pre)
{. . . .}

-- Liste dublu inlantuite.6 --

E.Kalisz - Structuri de date

Inserare dup celula cu adresa x


x

Secvena de operaii:
a

(5)

(3)

(4)

aux
(1)

(6)

n ou
(2)

 alocare spa
spaiu pentru o
noua celul (1)
 actualizarea cmpurilor
noii celule (2,3,4)
 actualizare referin
referine la
noua celul (5,6)

-- Liste dublu inlantuite.7 --

E.Kalisz - Structuri de date

Eliminarea celulei de la adresa x (x != s)


x
(2 )
(1 )
a

(3 )
xx

Secvena de operaii:
 actualizare leg
leg
turi n celulele vecine (1,2)
 eliberarea spa
spaiului ocupat de celul (3)
Daca informaia din celul este necesar pentru
prelucrri ulterioare, atunci ea trebuie salvat nainte
de eliminarea celulei.

S-ar putea să vă placă și