DINAMICE
back
back
Definire
Operaii specifice
Definiie :
O list este o structur de date dinamic n care att
adugarea ct i extragerea unui element se poate face de
pe orice poziie.
urm
inf
urm
inf
urm
...........
inf
nil
ultim
prim
Inf
adres de
legtur
urm
Observaie :
Ultimul element al listei (cel aflat la adresa
ultim) conine ca informaie de legtur valoarea
constantei predefinite nil, cu semnificaia c dup
acest element nu mai exist n list nici un alt
element .
inf
urm
Observaie :
Lista are un singur nod. Se
folosesc doi pointeri care-i
memoreaz adresa.
inf
urm
inf
urm
......
inf
urm
inf
urm
inf
urm
inf
urm
inf
inf
urm
nil
inf
nil
prim
ultim
procedure adaugare_sfarsit(var
ultim:adresa);
var p:adresa;
begin
new(p);
write(dati informatia:);
readln(p^.inf);
p^. urm:=nil;
ultim ^.urm:=p;
ultim:=p;
end;
inf
urm
inf
urm
inf urm
inf urm
prim
inf
......
notat p
new(p);
2. se completeaz informaia util
write(dati valoarea:);
read(p^.inf);
3. se completeaz zona de legtur a nodului p
cu adresa primului nod din lista
p ^.urm :=prim;
4.
se reactualizeaz adresa primului nod din lista
cu valoarea nodului p
prim:=p ;
urm
inf
urm
inf urm
inf
inf
inf
nil
ultim
.....
inf
urm
inf
urm
inf
urm
inf
urm
inf urm
inf
urm
inf
urm
......
q^.urm
p^.urm
inf urm
new(q);
2. se completeaz zona inf pentru noul nod
writeln(dati informatia:);
readln(q^.inf);
3. se leag noul nod la list
q^.urm:=p^.urm;
p^.urm:=q;
procedure adauga_dupa(p:adresa);
var q:adresa;
begin
new(q);
writeln(dati informatia:);
readln(q^.inf);
q^.urm:=p^.urm;
p^.urm:=q;
end;
inf
.....
urm
inf urm
inf
urm
inf
inf urm
inf
inf
urm
inf
urm
urm
urm
......
p^.urm
q^.urm
q
1. se aloc spaiu pentru noul nod q
new(q );
2. se copie informaia din nodul p n
nodul q
q^.inf:=p^.inf;
3. se citete noua informaie n p
write(dati informatia: );
readln(p^.inf);
4. se leag nodul q la list
q^.urm:=p^.urm;
5. se leag nodul p de nodul q
p^.urm:=q;
procedure adauga_in_fata(p:adresa);
var q:adresa;
begin
new(q);
q^.inf:=p^.inf;
write(dati informatia:);
readln(p^.inf);
q^.urm:=p^.urm;
p^.urm:=q;
end;
inf
urm
inf urm
prim
q
inf
inf urm
inf
urm
.................
q
urm
inf
urm
nil
inf urm
inf
nil
ultim
ultim
inf
urm
urm
inf
urm
inf urm
inf urm
inf
urm
prim
p
prim
inf
.............
inf
urm
inf urm
prim
q
urm
inf
urm
inf
urm
inf urm
inf
urm
inf
nil
inf
.........
q
.........
p^.urm
Procedure sterge_dupa(p:adresa);
var q:adresa;
begin
q:=prim;
while q^.urm<>p do
q:=q^.urm
q^.urm:=p^.urm;
dispose(p);
end;
inf
urm
inf urm
inf
inf
urm
inf urm
...............
prim
urm
inf
urm
inf urm
inf
nil
ultim
Parcurgem nodurile liste cu ajutorul unui pointer p care, plecnd de la primul nod
va referi pe rnd fiecare nod al listei : prelucrm informaia din nodul p, mutm p la
urmtorul nod i prelucrarea continu.
Procedure parcurgere(prim:adresa);
var p:adresa;
begin
p:=prim;
while p<>nil do
begin
{prelucrarea informatiei din nodul p}
p:=p^.urm;
end;
end;
Funcia returneaz :
- nil, dac valoarea x nu a fost gsit n list;
- adresa nodului ce are completat zona inf
cu valoarea memorat n variabila x;
Function cauta(prim:adresa;x:byte):adresa;
var p:adresa
begin
p:=prim;
while (p^.inf<>x) and (p<>nil) do
p:=p^.urm;
cauta:=p;
end;
ant
..............
ant
inf
inf
urm
nil
urm
ultim
1. se aloc spaiu pentru noul nod p
new(p);
2. se completeaz zona inf cu informaia util
write(dati informatia);
readln(p^.inf);
3. completarea zonei urm cu constanta nil
p^.urm:=nil;
4. completarea zonei de legtur ant a
nodului p cu adresa ultimului nod din list
p^.ant:=ultim;
5. se leag nodul p de nodul ultim
ultim^.urm:=p;
6. se actualizeaz valoarea variabilei ultim
cu adresa lui p
ultim:=p;
ant inf
urm
ant
nil
inf
p
ultim
ant
inf urm
ant inf
urm
nil
inf
ant
nil inf
urm
urm
..............
prim
...
ant
inf
urm
ant inf
ant
urm
inf
urm
...
q^.urm
p^.urm
p
ant
urm
q
1. se aloc spaiu pentru noul nod q
new(q );
2. se copie informaia din nodul p n
nodul q
q^.inf:=p^.inf;
3. se citete noua informaie n p
write(dati informatia: );
readln(p^.inf);
4. se leag nodul q la list
q^.urm:=p^.urm;
p^.urm^.ant:=q;
p^.urm:=q;
q^.ant:=p;
...
ant
inf
urm
ant
inf
urm
ant
inf
urm
...
q^.urm
p^.urm
p
ant
inf
urm
q
1. se aloc spaiu pentru noul nod q
new(q );
2. se citete noua informaie n q
write(dati informatia: );
readln(q^.inf);
3. se leag nodul q la list
q^.urm:=p^.urm;
p^.urm^.ant:=q;
p^.urm:=q;
q^.ant:=p;
nil
prim
inf
urm
nil inf
ant
urm
..............
p
prim
....
ant
inf
p^.ant
urm
ant
inf
urm
ant
inf
urm
..............
p^.urm
p^.ant^.urm
Procedure sterge_nod(p:adresa);
begin
p^.ant^.urm:=p^.urm;
p^.urm^.ant:=p^.ant;
dispose(p);
end;
Procedure parcurgere(prim:adresa);
var p:adresa;
begin
p:=prim;
writeln;
write(rezultatul este:);
while p<>nil do
begin
{prelucrarea informatiei din nodul p }
p:=p^.urm;
end;
writeln;
end;
..............
ant
inf
urm
ant
inf
urm
nil
ultim^.ant
ultim
p
1. se memoreaz adresa penultimului nod din
list n nodul p
p:=ultim^.ant;
2. se completeaz zona urm a nodului p cu
valoarea constantei nil deoarece nodul p
va deveni ultimul nod din list
p^.urm:=nil;
3. se terge fizic ultimul nod din list
dispose(ultim);
4. se reactualizeaz valoarea pointerului ultim
ultim:=p;
ant
inf
nil
ultim
nil
inf
urm
ant inf
urm
.....
ant
inf
nil
ultim
prim
ant
Adresa de
Informaia legtur cu
util
nodul urmtor
inf
urm
Observaie :
Ultimul element al listei (cel aflat la adresa
ultim) conine ca informaie de legturcu nodul
urmtor valoarea constantei predefinite nil, cu
semnificaia c dup acest element nu mai exist
n list nici un alt element .Primul element al listei
(cel aflat la adresa prim) conine ca informaie de
legtur cu nodul anterior valoarea constantei nil,
cu semnificaia c naintea acestui nod nu mai
exist nici un alt element.
The End
A elaborat:BivolElena
Profesor:Buimistru Sergiu