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

A B

A B

12 5

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; 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)

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

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

p p p
sau

? p^ p
NIL

s pstreze valoarea NIL (o constant predefinit Pascal)

Operaiile posibile cu variabile de tip reper

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

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

Locaie de memorie

Operaiile posibile cu variabile de tip reper

2. COMPARATIA

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

Variabilele referin pot s apar n expresii relaionale, singurii operatori relaionali admii fiind = i <>.

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); ...
End.

p
Adresa lui p^

p^
p^

MEMORIA

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 NEW (A); NEW (B); 3. Atribuire de valori A^ := 8; B^ := 6;

B
A B

A^ B^
8
-6

A
B

A^
B^

OPERAII CU VARIABILE DINAMICE


4. Copiere valori
A^ := B^ ; 5. Atribuire NIL B := NIL; 6. Atribuire de valori A^ := Round(3.14)+2;

-6

A^

B
A B

-6
-6

B^
A^

A
B

A^

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
1

A^
aux
3 2

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^

A
NEW(A);

A^
7
4

A B

7 4

A^ B^

A := B;

A B

A^ B^

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

PN

DUP

DISPOSE(A);

A B

? ?

A^ B^