Documente noi - cercetari, esee, comentariu, compunere, document
Documente categorii

Algoritmi pentru prelucrarea listelor dublu inlantuite

ALGORITMI PENTRU PRELUCRAREA LISTELOR DUBLU INLANTUITE

In cazul listelor dublu inlantuite, informatia de legatura trebuie sa contina si adresa succesorului nodului (pointerul *ant catre tipul nod):

struct nod

; // informatia pentru legatura

nod *prim, *ultim, *p;                  // pointeri pentru exploatarea listei

Fata de algoritmii corespunzatori de la listele simplu inlantuite, in cazul de fata trebuie intretinuta si adresa de legatura cu predecesorul nodului.

I. Crearea listei



Algoritmul de creare a unei liste (adaugarea primului nod la lista)

Se foloseste functia procedurala adaug_prim(), al carei parametru prim, de tip nod, se transmite prin referinta (sunt parametri de iesire).

void adaug_prim (nod *&prim)


II. Dupa ultimul nod

Se foloseste functia procedurala adaug_ultim(), al carei parametru ultim, de tip nod, se transmite prin referinta (este parametru de intrare-iesire).

void adauga_ultim (nod *&ultim)


2. In interiorul listei

2.a. In interiorul listei - dupa nodul cu adresa q.

Nodul p care se adauga se insereaza intre nodul q si succesorul lui q (nodul qurm).

Astfel, nodul p va avea ca predecesor nodul q (va fi succesorul lui q), iar ca succesor nodul qurm (va fi predecesorul lui qurm)

Se foloseste functia procedurala adaug_dupa(), ai carei parametri de tip nod, se transmit astfel:

- q (adresa nodului dupa care se face inserarea) se transmite prin valoare (este parametru de intrare);

- ultim (adresa ultimului nod) se transmite prin referinta (este parametru de intrare-iesire).

void adauga_dupa (nod *q, nod *&ultim)

;

2.b. In interiorul listei - inainte de nodul cu adresa q.

Nodul p care se adauga se insereaza intre succesorul lui q (nodul qurm) si nodul q.

Astfel, nodul p va avea ca predecesor nodul qurm (va fi succesorul lui qurm), iar ca succesor nodul q, (va fi predecesorul lui q).

Se foloseste functia procedurala adaug_in_fata(), al carei parametru q, de tip nod, se transmite prin valoare (este parametru de intrare);

void adauga_in_fata (nod *q)


void parcurge_inapoi (nod *ultim)


IV. Eliminarea unui nod din lista

1. Eliminarea primului nod

Se foloseste functia procedurala elimina_prim(), al carei parametru prim, de tip nod, se transmite prin referinta (este parametru de intrare-iesire).

void elimina_prim (nod *&prim)


2. Eliminarea ultimului nod

Se foloseste functia procedurala elimina_ultim(), al carei parametru ultim, de tip nod, se transmite prin referinta (este parametru de intrare-iesire).

void elimina_ultim (nod *&ultim)


3. Eliminarea unui nod din interiorul listei

Trebuie eliminat nodul p, deci predecesorul lui p (pant) trebuie legat de succesorul sau (purm). Astfel, nodul pant va avea ca succesor p nodul purm, iar nodul purm va avea ca predecesor nodul pant.

Se foloseste functia procedurala elimina(), al carei parametru p, de tip nod, se transmite prin referinta (este parametru de intrare-iesire).

void elimina (nod *p, nod *&ultim)