Liste liniare simplu inlantuite.





O lista liniara este o segventa finita de n elemente (componente) de acelasi tip de nod 1,nod 2,...nod n numite si noduri aflate intr-o relatie de ordine.

In cadrul unei liste sunt puse in evidenta :
- un element numit primul element;
- un element numit ultimul element;
- cate un singur element succesor pentru fiecare element al listei (cu exceptia ultimului element, care nu are succesor);
- cate un singur element predecesor pentru fiecare element al listei (cu exceptia primului element, care nu are predecesor);


Pentru a pune in evidenta succesiunea nodurilor, o lista o putem reprezenta astfel:



Componentele listei pot fi date elementare sau date structurate.

Operatiile cele mai importante definite pe liste sunt :
- crearea unei liste;
-parcugerea unei liste;
-adaugarea (inserarea) unui nou nod in lista;
- stergerea (eliminarea) unui nod din lista;
-afisarea listei.

Stergerea unui element dintr-un anumit loc din lista presupune deplasarea elementelor finale ale listei pentru a fi ocupat locul elementului ce se elimina.

void stergere(int val)

{Nod *c,*a;

c=prim;

if(prim->info==val)

{a=prim;

prim=prim->urm;

delete a;}

else

{while(c->urm->info!=val )

c=c->urm;

a=c->urm;

c->urm=a->urm;

if(a==ultim) ultim=c;

delete a;} }



Adaugarea (inserarea) unui nod in lista se poate face:
- in fata primului nod;
- in interiorul listei;
- dupa ultimul nod din lista.

Adaugarea (inserarea) in fata primului nod:

Acesta este cazul cel mai simplu: trebuie doar alocat elementul, legat de primul element din lista si repozitionarea capului listei:


l=new nod;
l->urm=p;
p=l;
p->x=p->urm->x;


Adaugarea (inserarea) unui nod in interiorul listei:
-se parcurge lista pana ce identificam nodul din lista dupa care se fae inserarea. Cautarea nodului se poate face in functie de informatia utila, fie in functie de numarul de ordine al nodului din lista.

q=new nod;
q->urm=l->urm;
l->urm=q;
q->x=q->urm->x;

Adaugarea (inserarea) la sfarsitul listei
In acest caz trebuie intai parcursa lista si dupa aceea adaugat elementul si legat de restul listei. De asemenea, trebuie avut in vedere cazul in care lista este vida.

void InserareSfarsit(Element* &cap, Date val)
{
// Alocare si initializare nod
Element *elem = new Element;
elem->valoare = val;
elem->urmator = NULL;
// daca avem lista vida
if (cap == NULL)
// doar modificam capul listei
cap = elem;
else
{
// parcurgem lista pana la ultimul nod
Element *nod = cap;
while (nod->urmator != NULL)
nod = nod->urmator;
// adaugam elementul nou in lista
nod->urmator = elem;
}
}













0 comentarii:

Trimiteți un comentariu

 
Copyright © Grupa1info