Structuri recursive (self-referential)
-------- ----- ------ -------------
O structura este recursiva daca un membru
pointer se refera la tipul structurii initiale ( 10210q161k recursie de ordinul 1, exista
si ordine mai
mari). De obicei, structurile recursive necesita rutine
explicite pentru rezervarea si eliberarea de memorie.
------------
Exemplu:
------------
struct lista
Fiecare variabila de tip "struct lista" are doi membri,
"data" si "urmator". Pictural, asta arata cam asa (in
memorie):
----- ----- ----
| | ----|-->
----- ----- ----
data urmator
Variabila pointer "urmator" contine o adresa a unei locatii de
memorie a unui element succesor "struct lista" sau valoarea speciala
NULL, definita in <stdio.h> ca avand valoarea constanta 0. Valoarea
NULL este folosita pentru notarea sfarsitului listei.
Presupunem ca avem declaratiile
struct lista a, b, c;
Vrem sa creeam o lista inlantuita formata din
aceste trei variabile. Mai intai, facem asignarile:
a.data = 1;
b.data = 2;
c.data = 3;
a.urmator = b.urmator = c.urmator = NULL;
Dupa aceste instructiuni, obtinem in memorie:
a
b
c
----- ----- ------
----- ----- ------ ----- ----- ------
| 1 | NULL
| | 2 | NULL | |
3 | NULL |
----- ----- ------
----- ----- ------ ----- ----- ------
data
urmator data urmator data
urmator
Acum putem "lega" cele trei structuri, astfel:
a.urmator = &b;
b.urmator = &c;
Obtinem:
a
b
c
----- ----- ----
----- ----- ---- ----- ----- ------
| 1
| ---|---->| 2
| ---|---->| 3 | NULL |
----- ----- ----
----- ----- ---- ----- ----- ------
data urmator data
urmator data urmator