LLSI Inserare

Adaugarea unui nod in lista
Pentru a putea adauga un nod in lista trebuie mai intai sa i se aloce o zona de memorie,adica trebuie gasita prima pozitie libera in vectorul lista.Notam aceasta pozitie cu p.

Algoritmul pentru alocarea memoriei este:
if (!este _plina)
{for (q=1; !liber[q]; q++); p=q; nr_el++;}

Pentru adaugarea unui nod in lista(prin scriere in pozitia p care I s-a alocat),in functie de situatie,se poate folosi unul dintre algoritmii urmatori:
1. adaugarea in fata primului nod;
2. adaugarea dupa ultimul nod;
3. adaugarea intr-o pozitie in interiorul listei.











In toate cele trei variante se presupune ca lista nu este plina si ca a fost alocata pozitia p in care urmeaza sa fie inserat elemental.

Adaugare in fata primului nod

Pasii executati in acest algoritm sunt:
Pas1.Nodul p care se adauga se leaga de nodul prim.
Pas2.Daca lista este vida ,nodul p inserat va fi nodul ultim.
Pas3.Nodul p inserat devine nodul prim.



lista[p].info=val;
lista[p].urm=prim; //nodul p se leaga de nodul prim
if (este_vida) ultimo=p;
prim=p; //nodul p devine nodul prim






Adaugare dupa ultimul nod
Pasii executati in acest algoritm sunt:
Pas1.Nodul inserat p este nod terminal(nu se leaga de nimic-NULL).
Pas2.Nodul ultim se leaga de nodul p inserat.
Pas3.Daca lista este vida,nodul p inserat va fi nodul prim.
Pas4.Nodul p inserat devine nodul ultim.

lista[p].info=val;
lista[p].urm-NULL; //nodul p nu se leaga de nimic
if (este_vida) prim=p;
lista[ultim].urm=p; //nodul ultim se leaga de nodul p
ultim=p; //nodul p devine nodul ultim



Adaugarea in interiorul listei se poate face in doua moduri:
a. dupa nodul din pozitia q;
b. inainte de nodul din pozitia q.



Adaugarea in interiorul listei,dupa nodul din q


Pasii algoritmului sunt:
Pas1. Nodul inserat p se leaga de succesorul nodului q.
Pas2. Nodul q se leaga de nodul p inserat.
Pas3.Daca nodul q a fost ultimul nod,nodul p inserat devie nodul ultim.






lista[p].info=val; lista[p].urm=lista[q].urm; lista[q].urm=p;
if (lista[p].urm==NULL) ultim=p;



Adaugarea in interiorul listei inainte de nodul din pozitia q
Pentru a insera nodul p inaintea nodului q,trebuie sa legam predecesorul nodului q de nodul p.Dar,predecesorul unui nod nu este cunoscut.Inserarea unui nod in lista inseamna,de fapt,inserarea in lista a informatiei pe care o contine,intre alte doua informatii,si anume:informatia din predecesorul nodului q trebuie sa fie anterioara ei,iar informatia din nodul q trebuie sa o urmeze,Astfel,in lista nu se va insera nodul p inainte de nodul q,ci dupa el, interschimband apoi informatiile intre cele doua noduri.

Pasii executati in acest algoritm sunt:
Pas1.Nodul inserat p se leaga de succesorul nodului q.
Pas2.Se copiaza informatia din nodul q in nodul p.
Pas3.Se copiaza in nodul q informatia care trebuie atribuita nodului p.
Pas4.Nodul q se leaga de nodul p inserat.
Pas5.Daca nodul q era nodul ultim,atunci nodul p devine nodul ultim.



lista[p].urm=lista[q].urm; lista[p].info=lista[q].info;
lista[q].info=val; lista[q].urm=p;
if (lista[p].urm)==NULL) ultim=p;