lista simplu inlantuita

6
LISTA SIMPLU INLANTUITA de elemente cu propietatea ca fiecare element contine adresa elementului urmator din li ste format din doua parti, o parte de informatie, o a doua parte de legatura (legatura istei). Adresa ultimului element al listei merge la NULL. Primul Primul element al element al listei listei Ultimul Ultimul element al element al listei listei OPERATII ASUPRA UNEI LISTE SIMPLU INLANTUITE Memorarea unei liste simple inlantuite struct lista { // partea de informatii lista *adresa; // reprezinta adresa urmatorului element din lista }; Informat ia Adresa Informat ia Adresa Informat ia Adresa Informat ia Adresa 1. Parcurgerea listei Se va pleca de la primul element al listei p = prim; Cat timp p este diferit de NULL se va afisa informatia cout<<p->nr; si se va trece la urmatorul element al listei p = p->adresa; void Afisare(lista *prim) { lista *p=prim; whlie (p!=NULL) { cout<<p->nr<<“ “; p = p->adresa; } } struct lista { int nr; lista *adresa; } Ex. Consideram o lista simplu inlantuita de numere intregi.

Upload: andrei-ionescu

Post on 06-Nov-2015

220 views

Category:

Documents


1 download

TRANSCRIPT

  • LISTA SIMPLU INLANTUITA colectie de elemente cu propietatea ca fiecare element contine adresa elementului urmator din lista.Un element este format din doua parti, o parte de informatie, o a doua parte de legatura (legatura cu urmatorul element al listei). Adresa ultimului element al listei merge la NULL.Primul element al listeiUltimul element al listeiOPERATII ASUPRA UNEI LISTE SIMPLU INLANTUITEMemorarea unei liste simple inlantuitestruct lista {// partea de informatiilista *adresa; // reprezinta adresa urmatorului element din lista};struct lista {int nr;lista *adresa;}Ex. Consideram o lista simplu inlantuita de numere intregi.

  • A. Cand in lista nu se afla nici un element (lista e vida)Ex. Consideram o lista de numere intregi- se va aloca memorie pentru primul element al listei prim =new lista;- partea de informatie va primi numarul intreg corespunzator primului element al listei prim->nr = numar // numar - parametrul de la procedura- fiind ca el va fi singurul element din lista adresa lui va merge la NUUL (dupa el in lista nu mai este nici un element) prim ->adresa = NULL;- el va fi in acelasi timp si ultimul element ultim = prim;struct lista {int nr;lista *adresa;};B. Cand in lista se afla cel putin un element (lista nu e vida)- se va aloca memorie pentru noul element al listei p =new lista;- partea de informatie va primi numarul intreg corespunzator noului element al listei p->nr = numar // numar - parametrul de la procedura- fiind ca el va fi ultimul element al listei (dupa adaugare) adresa lui va merge la NUUL (dupa el in lista nu mai este nici un element) p ->adresa = NULL;- noul element se leaga de celelalte - adica de ultimul element al listei ultim ->adresa = p; (adresa ultimului element al listei va merge la p)- el va fi in acelasi tim si ultimul element ultim = p;2. Adaugarea unui element in listaAvem doua cazuri:

  • ultimNoul ultimvoid Add(lista *& prim, int numar){if (prim == NULL) { prim = new lista; prim ->nr=numar; prim ->adresa=NULL; ultim = prim; }else { p = new lista; p ->nr=numar; p ->adresa=NULL; ultim->adresa = p; ultim = p; }}p

  • 3. Stergerea unui element din listaSe parcurge lista pana se intalneste elementul care trebuie sters. Stergerea se va face schimband adresa elementului precedent facand-o sa mearga la elementul de dupa el.Ex. Presupunem ca vrem sa stergem elementul care are informatia 8pqq ->adresa = p->adresa;delete p;p ->adresa

  • Ex. Presupunem ca vrem sa inseram un element care are la partea de informatie numarul 4, dupa elementul care contine numarul 84. Inserarea unui element in listavoid Inserare (lista *prim, int dupacare, int care) {lista *p = prim;while ((p!= NULL) &&(p->nr!=dupacare))p = p->adresa; if (p!=NULL) { q = new lista; q ->nr = care; q-> adresa = p->adresa; p ->adresa = q; } }dupacare - informatia elementului dupa care se va insera un element cu informatia carep - va fi elementul dupa care se va insera urmatorul elementq - elementul inserat

  • Daca elementul care trebuie sters este chiar primul element al listeiPrimul element al listei va deveni prim ->adresaprimprim ->adresap=prim;prim = prim ->adresa;delete p;Noua lista:primvoid Stergere (lista *&prim, int care) {lista *p = prim, *q = prim;while ((p!= NULL) &&(p->nr!=care)){q = p; p = p->adresa; }if (p==prim) { prim = prim ->adresa; delete p; }else if (p!=NULL) { q -> adresa = p->adresa; delete p; } else cout