Sunteți pe pagina 1din 7

STRUCTURI DE DATE

Structura de date este o noţiune abstractă, prin care se înţelege un ansamblu de date caracterizat prin
relaţiile existente între ele şi a operaţiilor care pot fi efectuate cu datele respective.
Clasificarea structurilor de date se poate face în funcţie de:
1.TIPUL DATELOR
• structuri de date omogene, adică toate datele componente sunt de acelaşi tip (ex. VECTORI, MATRICI)
• structuri de date neomogene, adică pot conţine date de tipuri diferite(TIPUL STRUCT).
2. ALOCAREA MEMORIEI
• static - structura de date ocupă o zonă de memorie de dimensiune fixă,alocată pe întreaga durată
a execuţiei blocului în care este declarată.
• DINAMIC - structura de date ocupă o zonă de memorie de dimensiune variabilă, alocată pe parcursul
execuţiei programului la cererea explicită a programatorului.

Alocarea dinamica a componentelor structurii impune un mecanism prin care o noua componenta aparuta
este legata in succesiune logica de corpul structurii deja format pana atunci.
Rezulta ca fiecare componenta, pe langa informatia propriu-zisa pe care o detine, trebuie sa contina si o
informatie de legatura cu componenta cu care se leaga logic in succesiune.
Aceasta informatie de legatura va fi adresa componentei spre care se realizeaza succesiunea logica, iar
mecanismul se mai numeste si alocare inlantuita dupa adrese.
LISTE
DEFINITII
Există următoarele tipuri de liste:
Nodul
liniară simplu înlănţuită - legăturile între noduri
este o unitate de informaţie elementară care
sunt liniare şi într-un singur sens.
conţine informaţii utile şi date de legătură.
lista liniară dublu înlănţuită – fiecare nod este
Lista
legat prin pointeri atât de nodul anterior, cât şi de
este o structură de date constituită dintr-o
nodul următor.
succesiune de elemente,numite noduri, aflate
lista circulară – ultimul nod adresează primul nod.
într-o relaţie de ordine.

DECLARAREA LISTEI SIMPLU INANTUITE info va contine informatia utila memorata in


struct NOD nodul current
{ int info;
NOD *next; next =camp ce va retine adresa nodului
}; urmator
NOD *prim, * ultim; prim , ultim reprezinta primul ,respectiv
utimul nod a listei
LISTA SIMPLU INLANTUITA
O lista simplu inlantuita are forma urmatoare:

Componentele listei se vor aloca dinamic. Avem nevoie de o variabila statica sau locala cu ajutorul careia
sa putem accesa primul element al listei. Fie acesta prim. 
Cu ajutorul ei putem accesa prima componenta, care contine o legatura catre ce-a de-a doua etc. Din
aproape in aproape putem ajunge la ultimul element al listei.

Referirea la informatia primului nod al listei se va face astfel:


prim->info
Referirea la adresa la care e memorat al doilea nod al listei se va face astfel:
prim->next
Referirea la informatia celui de-al nod al listei se va face astfel:
prim->next->info
Este evident ca in cazul listei simplu inlantuite ultim->next pointeaza catre NULL deoarece nu mai urmeaza nici un nod in
lista
Operatiile care se pot face utilizand liste simplu
inlantuite

   crearea listei
     adaugarea unui element la inceputul listei

  adaugarea unui element la sfarsitul listei

adaugarea unui element in interiorul listei


    stergerea elementului de la inceputul listei

       stergerea elementului de la sfarsitul listei

   stergerea unui element din interiorul listei

    traversarea listei, cu prelucrarea elementelor acesteia


Crearea si adaugarea
Consideram declaratia initiala a stucturii de date alocata dinamic
struct nod
  {int info;
   nod *next;};
 
nod *p,*u ;         // declaram 2 variabile pointer de tipul nod
int n;                  //numarul de noduri

Putem crea primul nod a listei intr.-un subprogram separat sau putem
folosi acelasi subprogram pentru creare primul nod si adaugarea celorlate
noduri.
Creare si adaugare-suprogram

void cre_ad()     //functia de creare si adaugare  a unui nou element


{nod *c;//variabila locala de tip nod
 if(!p)                   //daca lista este vida (p==0) se aloca primul nod
    {p=new nod;//se aloca in Heap , dynamic, o adresa pentru nodul p! p este recunoscut aici(var globala)
     cout<<"valoare primului nod ";
     cin>>p->info;//se citeste valoarea informatiei din primul nod
     u=p;            //la creare primul si ultimul nod vor fi identici
     }
 else                             //altfel se adauga un nou element la sfarsit
     { c=new nod;          //se aloca un nou nod
       cout<<"informatia utila :";
       cin>>c->info;        //se completeaza campul informatie utila
       u->next=c;            //se adauga dupa ultimul nod datorita atribuirii u=p
       u=c;                      //se stabileste noul nod c ca fiind ultimul
       }
u->next=0;                   //campul adresa urmatoare a ultimului nod este 0(catre NULL)
     }
Apelul functiei de creare si adaugare in functia main

int main()
{
 cout<<"n=";
 cin>>n;//se citeste numarul de noduri
 
 for(int i=1;i<=n;i++)
     cre_ad( );//se adauga pe rand informatia din fiecare nod
return 0;
}

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