Sunteți pe pagina 1din 6

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.

Informatia

Adresa

Informatia

Adresa

Informatia

Adresa

Primul element
al listei
Memorarea unei liste simple inlantuite
struct lista {
// partea de informatii

Informatia

Adresa

Ultimul
element al listei
Ex. Consideram o lista simplu inlantuita de
numere intregi.
struct lista {

lista *adresa; // reprezinta adresa urmatorului element din lista

int nr;
lista *adresa;

};

OPERATII ASUPRA UNEI LISTE SIMPLU INLANTUITE

}
void Afisare(lista *prim) {

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;

lista *p=prim;
whlie (p!=NULL) {
cout<<p->nr<< ;
p = p->adresa;
}}

2. Adaugarea unui element in lista


Avem doua cazuri:
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;

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;

struct lista {
int nr;
lista *adresa;};
Nr.intreg

Adresa

Primul element al listei


Ultimul element al listei

Informatia

Adresa

Informatia

void Add(lista *& prim, int numar)


{

Adresa

Informatia

Adresa

ultim
Informatia

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;
}

Adresa

Noul ultim

3. Stergerea unui element din lista


Se 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 8

Adresa

Adresa

Adresa

12

Adresa

p ->adresa

q ->adresa = p->adresa;
delete p;

Adresa

Adresa

12

Adresa

p ->adresa

4. Inserarea unui element in lista


Ex. Presupunem ca vrem sa inseram un element care are la partea de informatie
numarul 4, dupa elementul care contine numarul 8

Adresa

Adresa

Adresa

12

Adresa

void Inserare (lista *prim, int dupacare, int care) {


4

lista *p = prim;

Adresa

Elementul nou

while ((p!= NULL) &&(p->nr!=dupacare))


p = p->adresa;

dupacare - informatia elementului


dupa care se va insera un element cu
informatia care

if (p!=NULL) {
q = new lista;
q ->nr = care;

p - va fi elementul dupa care se va


insera urmatorul element

q-> adresa = p->adresa;

q - elementul inserat

p ->adresa = q;
}}
5

Adresa

Adresa

Adresa

Adresa

12

Adresa

Daca elementul care trebuie sters este chiar primul element al listei

Adresa

prim

Adresa

prim ->adresa

Adresa

12

Adresa

p=prim;

Primul element al listei va deveni prim ->adresa

prim = prim ->adresa;


delete p;

Noua lista:
6

Adresa

Adresa

12

Adresa

prim
void Stergere (lista *&prim, int care) {

care - informatia elementului de sters

lista *p = prim, *q = prim;

p - elementul care se sterge

while ((p!= NULL) &&(p->nr!=care))

q - elementul de dinaintea elementului de sters

{q = p; p = p->adresa; }

daca elementul care trebuie sters este chiar


primul element al listei atunci noul element al
listei este prim->adresa.

if (p==prim) { prim = prim ->adresa; delete p; }


else
if (p!=NULL) { q -> adresa = p->adresa; delete p; }
else
cout<<Elementul nu a fost gasit ;
}

Daca se parcurge lista si nu se gaseste nici un


element cu informatia care atunci se va afisa ca
elementul nu a fost gasit.

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