Sunteți pe pagina 1din 20

STRUCTURI DINAMICE

DE DATE
Variabile dinamice
Tipul referin. Definire
Operaii admisibile

MEMORIA CALCULATORULUI

PROGRAM Test;
VAR A,B: Integer;
BEGIN
...
A := 12;
B := 5;
...
END.

Declarare
variabile

Atribuire
valori

12

VARIABILE STATICE
Toate variabilele pentru care n momentul crerii programului se
poate evalua cantitatea de memorie necesart stocrii acestora se
numesc variabile statice
Variabilele declararte n program i notate printr-un identificator
(nume) se numesc variabile statice
Variabilele care exist pe toat durata de execuie a blocului n
care au fost declarate se numesc variabile statice

VARIABILE DINAMICE
Variabilele care sunt create i distruse pe parcursul execuiei programului se numesc variabile dinamice

ine minte!!!
1. Variabilele dinamice nu se declar ntr-o seciune VAR deci nu se
pot identifica prin nume.

2. Nu exist pe toat durata de execuie a programului sau activrii


blocului n care s-au creat.
3. Variabilele dinamice se aloc dinamic ntr-o zon special de
memorie, numit memorie HEAP i se distrug la cererea
programatorului.
4. Accesul la variabilele dinamice se poate face prin intermediul altor
variabile speciale, numite variabile REPER, REFERIN,
INDICATOR, ADRES, POINTER

VARIABILA REFERIN I DINAMIC

Variabila REFERIN

Variabila DINAMIC

p^

DEFINIRI, DECLARRI
^

Identificator_tip_de_baza
POINTER

TYPE Identificator_tip_Referinta = ^ Identificator_tip_de_baza;


VAR Identificator_Variabila : Identificator_tip_Referinta;
TYPE Identificator_tip_Referinta =^Identificator_tip_Utilizator;
Identificator_tip_Utilizator = ... ;
VAR Identificator_Variabila : Identificator_tip_Referinta;
sau
VAR Identificator_Variabila : ^ Identificator_tip_Referinta;

EXEMPLE
TYPE
SubRange=1..25;
RefSub=^Subrange;
Enumerated=(Rosu, Galben, Verde);
RefEnum=^Enumerated;
Vector=Array[1..10] of Real;
RefVec=^Vector;

RefData=^DataNast;
DataNast=RECORD
Zi : 1..31;
Luna : 1..12;
An : 1900..2050;
end;
RefXXX=POINTER;

VAR
p : RefSub;
p1 : RefEnum;
p2 : RefVec;
p3 : RefData;
a : ^Integer;
r : ^Real;
ch : ^Char;
Variabilele p, p1, p2, p3, a, r,
ch sunt variabile referin,
sau variabile reper. Pentru ele
se aloc la compilare un
spaiu de memorie de 4 bytes
(conine adresa de memorie a
variabilei dinamice referite)

Valorile variabilelor referin


Variabilele referin (reper) pot s primeasc trei
tipuri de valori (s se afle n trei stri):
s fie neiniializate,
nedefinite, nedeterminate
(n-au nici o valoare)

s conin referina
(adresa) la o variabil
dinamic

s pstreze valoarea NIL


(o constant predefinit
Pascal)

?
p^
sau

NIL

Operaiile posibile cu variabile de tip reper

1. ATRIBUIREA
TYPE IdTip = ...;
VAR p, q : ^ IdTip;
BEGIN

Variabila referin poate primi


valoarea unei alte variabile sau
funcie de acelai tip referin cu
ea, sau poate fi iniializat cu
constanta NIL.

...
p := q ;
...
p := NIL ;
...
END.

p
q
p

Locaie de
memorie

Operaiile posibile cu variabile de tip reper

2. COMPARATIA

Variabilele referin pot s apar


n expresii relaionale, singurii
operatori relaionali admii fiind
= i <>.

VAR R, RR : ^ Real;
Ri, Rc : ^ Integer;
logic : Boolean;
BEGIN
...
logic := Ri <> NIL ;
...
If (R=RR) OR (logic) Then ... ;
...
END.
Variabilele referin pot fi

3. PARAMETRI

parametri ai unor proceduri sau


funcii

VARIABILA DINAMIC
CREARE

Variabilele dinamice sunt variabilele de un tip oarecare simplu sau


structurat pentru care se poate aloca memorie numai n faza de
execuie a programului n funcie de necesitate.
Type RefTip = ^Real;
Var p: RefTip;
Begin

NEW(p);
...

p^

End.

Adresa lui p^

MEMORIA

p^

Program
Zon variabile
statice

Zon variabile
dinamice (HEAP)

VARIABILA DINAMIC
DISTRUGERE

Eliberarea zonelor de memorie, ocupat de variabilele dinamice,


create prin execuia procedurii NEW, pentru a nu deveni gunoi
se realizeaz prin execuia procedurii predefinite DISPOSE.

Type RefTip = ^Real;


Var p: RefTip;
Begin

...
DISPOSE(p);
p:=NIL;

End.

OPERAII CU VARIABILE DINAMICE


1. Declarare
VAR A, B: ^Integer;

2. Creare

A^

NEW (A);
NEW (B);

B^

3. Atribuire de valori

A^

A^ := 8;
B^ := 6;

-6

B^

OPERAII CU VARIABILE DINAMICE


4. Copiere valori

-6

A^

A^ := B^ ;

-6

B^

5. Atribuire NIL

-6

A^

B := NIL;

6. Atribuire de valori

A^

A^ := Round(3.14)+2;

OPERAII CU VARIABILE DINAMICE


7. Schimb adrese
B := A ;
8. Schimb valori
Var aux:Real;
A,B:^Real;
Begin
NEW(A); NEW(B); ...
{1} aux:=A^;
{2} A^:=B^;
{3} B^:=aux; ...
End.

A^

B
A

A^
1

aux

2
3

B^

OPERAII CU VARIABILE DINAMICE


9. Creare variabile dinamice structurate
TYPE Vector=Array[1..4] of Integer;
Var A:^Vector;
Begin
...
NEW(A);
A
...
End.

A^[1]
A^[2]
A^[3]
A^[4]

Acces la o component n caz general: A^[i]

OPERAII CU VARIABILE DINAMICE


10. Creare variabile dinamice structurate
TYPE Complex=RECORD
Re, Im : Real;
end;
VAR C : ^Complex;

Begin
...
NEW(C);
...
End.

C^.R
e
C^.Im

Acces la o component n caz general: Id_var^.cmp

ERORI FRECVENTE
NODURI INACCESIBILE Structuri dinamice cu referine
la ele pierdute (ldia ncuiat cu cheia pierdut) apar dup utilizarea procedurii NEW sau instruciunii de atribuire
PN
DUP

A^

NEW(A);

A^

B^

A := B;

A^

A^
B^

ERORI FRECVENTE
REFERINE SUSPENDATE Indicatori ce conin
referine la locaii de memorie eliberate cu DISPOSE

PN

DUP

DISPOSE(A);

A^
B^