Sunteți pe pagina 1din 9

Cap. 5 Tipul indicator(referinta).

Structuri de date
recursive

 Structurile de date statice ocupa o zona fixa de memorie, de volum


constant, pe toata durata executiei programului; sunt structuri de date
fundamentale, carora li s-au asociat tipuri de date ( multimea de valori,
operatori, structura si dimensiunea zonei de memorie ocupate de
instantele tipului)
 Structurile de date dinamice se modifica atat ca structura, dar si ca
dimensiuni in timpul executiei
 Utilizarea structurilor dinamice necesita un tip de data special numit tip
indicator ( sau tip referinta) prin intermediul caruia se vor referi
structurile dinamice ( variabile indicate)
 Valorile variabilelor tipului indicator precizeaza locatii de memorie ( nu
sunt date efective)

SDA curs 10 I INFO 2015/2016 1


TDA indicator

I MM consta dintr-o multime de valori care indica adrese de memorie ale


unor variabile indicate, apartinand unui tip precizat; multimea cuprinde
si indicatorul NULL
II Notatii TipIndicator p, q;
TipIndicat e;
boolean b;
III Operatori nou(p) plaseaza valoarea adresei de memorie in p;
elib(p) elibereaza zona de memorie corespunzatoare
variabilei indicate de p
MemoreazaIndicator (p,q);
Memoreazavaloare Indicata(p,e);
FurnizeazaValoare Indicata(p,e);
IndicatorIdentic(p,q)->b

SDA curs 10 I INFO 2015/2016 2


Implementarea tipului indicator

a.Pointeri: - in Pascal si C o variabila de tip pointer este o variabila statica;


- implementarea tipului pointer presupune o legatura fixa intre
tipul pointer declarat si tipul variabilei indicate
- suport fizic: adresarea indexata
Ex. typedef TipIndicat* TipIndicator;
TipIndicator a,b,c;
b. Cursori e specifica limbajelor care nu definesc pointer
- o variabila de tip intreg utilzata pentru a indica o locatie intr-un
tablou; uzual este interpretat ca indice in tablou
- cu cursori pot fi implementate toate structurile dinamice care
presupun inlantuiri
- sarcina gestionarii zonei de memorie revine exclusiv
programatorului

SDA curs 10 I INFO 2015/2016 3


Structuri de date recursive

 O structura de date care are cel putin o componenta de acelasi tip cu


structura insasi

 Ex. : (x+(y-z))/u

typedef struct expr {


char op;
struct expr *op1;
struct expr *op2;
}Expresie;

op +, -, /, *; op1, op2 sunt pointeri la alte expresii


litera; op1, op2 au valoarea NULL

SDA curs 10 I INFO 2015/2016 4


Cap. 6 Structura de date lista
6.1 TDA Lista

 Structura de date dinamica, flexibila


I MM o secventa de 0 sau mai multe elemente apartinand unui tip numit tip de
baza;
- a1, a2, , an ; ai nodurile listei; n>=0
- n lungimea listei
- daca n>=1 a1 primul nod; an = ultimul nod
- ordonata liniar functie de pozitia nodurilor; a i precede pe a i+1;ai succede
pe ai-1
II Notatii: TipLista l;
TipPozitie p;
TipNod x;
III Operatori : - insereaza nod in lista, sterge nod in lista, cauta nod in lista,
urmatorul nod in lista, primul nod in lista, etc.
- ListaVida(l); InsertieInceput(x, l); InsertieDupa(x, l, p);

SDA curs 10 I INFO 2015/2016 5


6.2 Tehnici de implemetare

a.Tablouri

#define LungMax
typedef TipNod;
typedef int TipIndice;
typedef int TipPozitie;
Typedef struct {
TipNod noduri[Lungmax];
TipIndice ultim;
} TipLista;
TipLista Lista;

SDA curs 10 I INFO 2015/2016 6


b. Pointeri
typedef struct nod{
int cheie;
struct nod *urm;
info;
}TipNod;
typedef struct nod * TipPointerNod;
typedef TipPointerNod TipLista;
TipLista Inceput;
Operatii cu liste inlantuite:
- Inserare la inceput, la sfarsit, dupa nodul curent, la pozitia nodului curent, etc
- Stergere nodul urmator nodului curent, nodul curent, etc
- Traversare liste

SDA curs 10 I INFO 2015/2016 7


c. Reprezenaterea listelor inlantuite cu cursori
#define LungMax
typedef TipNod;
typedef int TipCursor;
typedef TipCursor TipLista;
typedef struct{
TipNod nod_lista;
TipCursor urm;
}Tipcelula;
TipCelula zona[Lungmax];
TipLista L, M, Disponibil;
Inserare: se suprima prima locatie din Disponibil si se inlantuie in lista pe pozitia
dorita;
Stergere: se suprima din lista si se insereaza in Disponibil

SDA curs 10 I INFO 2015/2016 8


6.3 Tehnici utilizand structura de date lista simplu inlantuita

a.Inserarea unui nod la inceput ( capul listei)


b.Inserarea unui nod la sfarsit (coada listei)
c.Inserarea unui nod in interiorul listei:
- dupa un anumit nod ( se cunoaste predecesorul)
- inaintea unui anumit nod ( se cunoaste succesorul)
d.Crearea unei liste:
- prin inserari repetate la inceput;
- prin inserari repetate la sfarsit
e. Stergerea unui nod:
- cand se cunoaste predecesorul
- stergerea nodului curent
f. Traversarea listei
g. Cautarea unui nod in lista cu metoda fanionului
h. Tehnica celor doi pointeri

SDA curs 10 I INFO 2015/2016 9