Sunteți pe pagina 1din 12

Liste liniare simplu

inlantuite
Adaugarea si stergerea
nodurilor

Glodeanu Natali
cls. a XI - A
Adaugarea nodurilor

Adaugare unui nod se poate face in


mai multe feluri:
• Adaugarea primului nod
• Inainte de primul nod
• Dupa ulimul nod
• In interiorul listei
 Dupa nodul din pozitia q

 Inainte de nodul din pozitia q


Adaugare primului nod
Pasii: void adaugp(nod *& prim,nod
*&ultim,int x)

1. Se aloca memorie pentru primul nod { nod *prim=new nod;


2. Se scrie informatia in nodul prim prim->info=x;
3. Adresa de legatura a nodului va fi nula prim->urm=NULL;
4. Nodului ultim i se atribuie adresa nodului prim ultim=prim;
}

Primul nod din lista :


prim->info prim->urm

X 0

tip int prim si ultim


tip pointer
la adresa
Adaugare inainte de primul nod
void ainfata(nod *&prim, int x)
Pasii:
• Se aloca memorie nodului { nod *p=new nod;
• Se scrie informatia in nodul p p->info=x;
• Nodul p se leaga de nodul prim p->urm=prim;
• Nodul p inserat devine prim prim=p;
}

x prim

p
prim prim
Adaugare dupa ultimul nod
Pasii: void adupa(nod *&ultim,int x)
{ nod *p=new nod;
1. Se aloca memorie nodului
2. Se scrie informatia in nod p->info=x;
3. Adresa de de legatura a nodului p devine NULL p->urm=NULL;
4. Nodul ultim se leaga de nodul p adaugat ultim->urm=p;
5. Nodul p devine ultim ultim=p;
}

p
0 X 0

ultim p ultim
Adaugare dupa un nod q
Pasii: void adupaq(nod *q, nod *&ultim, int x)
{ nod *p=new nod;
• Se aloca memorie nodului
• p->info=x;
Se scrie informatia in nod
• Nodul p se leaga de succesorul nodului q p->urm=q->urm;
• Nodul q se leaga de nodul p adaugat q->urm=p;
• Daca nodul q a fost ultimul nod in lista, if(q==ultim)
atunci p devine ultim ultim=p;
}

p
q->urm x q->urm

q p
Adaugare inainte de nod q
void ainainteq(nod *&q,
Pasii:
nod *&ultim, int x)
1. Se aloca memorie nodului { nod *p=new nod;
2. Copiem informatia din q in p p->info=q->info;
3. Nodul p se leaga de succesorul nodului q p->urm=q->urm;
4. Se scrie in q info. care trebuia adugata q->info=x;
5. Nodul q se leaga de nodul p adugat q->urm=p;
6. Daca q a fost ultimul nod in lista, if (purm==NULL)
nodul p adaugat devine ultim; ultim=p;
}

q->info p
X q->urm q->info q->urm

q
p q
p
Stergerea unui nod

Se poate sterge :
• Primul nod din lista
• Ultimul nod din lista
• Un nod dintr-o pozitie intermediara
• Toata lista
Stergerea primului nod din
lista
Pasi:
void eliminprim(nod *&prim)
1. Se salveaza adresa pointerului prim in q { nod *q=prim;
2. Succesorul nodului devine prim prim=prim->urm;
3. Se elibereaza zona de memorie delete q;
ocupata de pointerul q }

prim prim
Stergerea ultimului nod
din listavoid eliminultim(nod *prim, nod
Pasii: *& ultim)

1. Se salveaza adresa ultim in q { nod *p,*q=ultim;


2. Se cauta predecesorul ultimului nod, for(p=prim; p->urm->urm!=NULL;
prin parcurgerea listei de la primul nod p->urm);
pana predecesorul nodului terminal (cu adr. 0)
3. Predecesorul va contine adres NULL p->urm=NULL;
4. Predecesorul nodului ultim devine ultim ultim=p;
5. Se elibereaza spatiul de memorie ocupat de q delete q;
}

0 0

ultim q
ultim
Stergerea unui nod din
interiorul listei
Pasii: void elimina(nod *p, nod *&ultim)
1. Se salveaza adr. succesorului lui p in q { nod *q=p->urm;
2. Copeim in p informatia din q p->info=q->info;
3. Copiem in p adresa din q p->urm=q->urm;
4. Se elibreaza spatiu de mem. ocupat de q delet q;
5. Daca suceesorul lui p a fost ultim, if(p->urm==NULL)
atunci p devine ultim ultim=p;
}

q->info q->urm q->info q->urm

p q
Stergerea unei liste
intregi
Pasii: void steglista(nod *&prim)
1.Se initializeaza p cu adresa nodului prim { nod *p=prim,*q;
2.Cat timp p diferit de NULL se parcurge lista while(p!=NULL)
3.Se salveaza adresa nodului p in q { q=p;
4.Se trece la nodul urmator p=p->urm;
5.Se elibereaza zona de memorie ocupata de q delet q;
6.Se revine la pasul 2 }
7.Prim devine si ultim prim=ultim;
}

The end
0

p q p q p q ultim
prim 0

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