|
ALGORITMI PENTRU PRELUCRAREA LISTELOR CIRCULARE SIMPLU INLANTUITE
I. Crearea listei
Algoritmul de creare a unei liste (adaugarea primului nod la lista vida)
P1. Se adauga primul nod la lista (nodul prim).
P2. Cat timp mai exista informatie, executa:
se adauga un nod la lista.
P3. Se leaga ultimul nod de nodul prim.
Se foloseste functia procedurala creare(), al carei parametru prim, de tip nod, se transmite prin referinta (este parametru de iesire).
Se foloseste variabila globala n pentru citirea informatiei din nod. Se considera ca nu mai exista informatie atunci cand valoarea citita pentru n ia valoarea 0.
void creare (nod *&prim)
ultim→ultim = prim;}
II. Parcurgerea listei
Lista circulara nu contine un ultim nod, deci se va considera ca nod care termina lista nodul prim.
Se foloseste functia procedurala parcurge(), al carei parametru prim de tip nod se transmite prin valoare (este parametru de intrare).
void parcurge (nod *prim)
III. Eliminarea unui nod din lista
Daca se doreste eliminarea nodului care urmeaza dupa nodul curent p trebuie sa se verifice daca acest nod nu este nodul prim, ca sa nu se piarda adresa primului element din lista.
P1. Se salveaza adresa nodului prim in pointerul q.
P2. Se leaga nodul p de succesorul succesorului sau.
P3. Daca succesorul nodului p este nodul prim, atunci succesorul nodului prim devine nodul prim.
P4. Se cere eliberarea zonei de memorie de la adresa memorata in pointerul q.
Se foloseste functia procedurala elimina_urm(), ai carei parametri, de tip nod, se transmit astfel:
- p (adresa nodului care se elimina) se transmite prin valoare (este parametru de intrare);
- prim (adresa primului nod) se transmite prin referinta (este parametru de intrare-iesire).
void elimina_urm (nod *p, nod *&ultim)
{nod *q = p→urm;
p→urm = p→urm→urm;
if (q = = prim)
prim = prim→urm;
delete q;