Sunteți pe pagina 1din 7

Pointeri

Pointer = variabila care retine adrese de memorie


Declarare: tip *nume_pointer;
tip = tipul de adresa pe care o poate stoca pointerul
exemplu: int* p;
float* a;
-------------
int a=7;
int* p;
Cum aloc unui pointer adresa unei alte variabile?
p=&a;
Cum se acceseaza valoarea unei variabile a carei adresa este
memorata de pointerul p?
cout<<*p; 7

Variabile dinamice
Caracteristici: - se memoreaza intr-o zona numita HEAP
- nu au nume, se identifica si acceseaza prin intermediul unui
pointer
- durata de viata este in momentul in care fost create pana in
momentul in care au fost distruse
SS / SD HEAP

p 5
Crearea unei variabile dinamice (alocarea de spatiu in HEAP)
pointer = new tip;
exemplu: int *p;
p=new int;
se creeaza in HEAP o variabila dinamica de tipul int, a carei
adresa se memoreaza in pointerul p
*p = 5;
*p++;  6
Distrugerea unei variabile dinamice:
delete nume_pointer;
exemplu: delete p;

SS / SD HEAP

Liste alocate dinamic


- liste simplu inlantuite
- liste dublu inlantuite
O lista este un sir de elemente de acelasi tip
Intr-o lista alocata dinamic, toate elemente vor fi stocate in variabile
dinamice

Liste simplu inlantuite

Elementele unei liste se vor numi noduri


Structura unui nod
Valoarea Adresa
nodului elementul
urmator
val urm
Implementare:
struct nod
{ int val;
nod* urm;
};

Functia de adaugare a unui nod intr-o lista simplu inlantuita

X NULL

P u nou
void adaug(nod* &p, nod* &u, int x)
{ nod* nou;
if(!p) { p=new nod;
p->val = x; // echivalent cu (*p).val = x;
p->urm = NULL; //NULL = 0 la nivel de adrese
u=p;
}
else { nou=new nod;
nou->val = x;
nou->urm = NULL;
u->urm = nou;
u=nou;
}
}
Crearea unei liste simplu inlantuite cu n elemente:
void creare(nod* &p, nod* &u, int n)
{ int i, x;
for(i=1;i<=n;i++)
{ cin>>x;
adaug(p,u,x);
}
}
Afisarea unei liste simplu inlantuite
void afisare(nod* p)
{ nod* c;
c=p;
while(c!=NULL)
{ cout<<c->val<<” ”;
c = c->urm;
}
}

void afisare(nod* p)
{ nod* c;
for(c=p;c!=NULL;c=c->urm)
cout<<c->val<<” ”;
}

Adaugarea unui nod

1. Adaugarea la finalul listei – facuta la creare


2. Adaugarea la inceputul listei
3. Adaugarea in interiorul listei

2. Adaugarea la inceputul listei


void adauginc(nod* &p, int x)
{ nod *nou;
nou = new nod;
nou->urm = p;
nou->val = x;
p=nou;
}

3.Adaugarea dupa un nod de adresa c (adresa c se obtine in urma


unei cautari)
void adaugareint(nod* p, nod* &c, int x)
{ nod* nou;
nou=new nod;
nou->val = x;
nou->urm = c->urm;
c->urm = nou;
}

P c c->urm nou
Stergerea unui nod

1. Stergerea primului nod

void stergp(nod* &p)


{
nod* c=p;
p=p->urm;
delete c;
}

2. Stergerea unui nod din interiorul listei

NULL

P c u
Atentie!! c este adresa de dinaintea celei care se sterge!!

void sterg(nod* &c, nod* &u)


{ nod* q;
q=c->urm;
c->urm = q->urm;
if(q==u) u=c;
delete q;
}

S-ar putea să vă placă și