Documente Academic
Documente Profesional
Documente Cultură
adr1, adr2, adr3, ..., adrn reprezint n nregistrri; info1, info2, info3, ..., infon reprezint informaiile coninute de noduri, de alt natur dect cele de adres 0 - are semnificaia "nici o adres" - elementul este ultimul n list.
Un element din list (numit i nod de list) este de un tip structur i are (cel puin) dou cmpuri: un cmp de date (sau mai multe) si un cmp de adrtur. Exemplu:
typedef int T; // orice tip numeric typedef struct nod { T info ; // cmp de date struct nod * adr ; // cmp de adrtur } Nod;
Operaii asupra unei liste liniare O list nlnuit este complet caracterizat de variabila "cap de list", care conine adresa primului nod (sau a ultimului nod, ntr-o list circular). Operaiile uzuale cu o list nlnuit sunt :
- Iniializare list ( a variabilei cap de list ): initL (List &) - Adugarea unui nou element la o list: addL (List&, T) - Eliminarea unui element dintr-o list: delL (List&, T) - Cutarea unei informaii date ntr-o list: findL (List, T) - Test de list vid: emptyL(List) - Determinarea dimensiunii listei: sizeL (List) - Parcurgerea tuturor nodurilor din list (traversare list).
Accesul la elementele unei liste este strict secvenial, pornind de la primul element i trecnd prin toate nodurile precedente celui cutat, sau pornind din elementul curent al listei, dac se memoreaz i adresa elementului curent al listei. Pentru parcurgere se folosete o variabil cursor, de tip pointer ctre nod, care se iniializeaz cu adresa cap de list; pentru a avansa la urmtorul element din list se folosete adresa din cmpul de adres al nodului curent:
Nod * p, *prim; p=prim; //adresa primului element ... p=p->adr; //avans la urmatorul nod
Exemplu de afiare a unei liste nlnuite definite prin adresa primului nod:
void printL(Nod *lst){ while(lst!=NULL){ adresa lst printf("%d ", lst->info); lst=lst->adr; } //repeta cat timp exista ceva la
Cutarea secvenial a unei informaii date ntr-o list este asemntoare operaiei de afiare, dar are ca rezultat adresa nodului ce conine informaia cutat .
Nod *findL(Nod *lst, T x){ while(lst!=NULL && x!=lst->info) lst=lst->adr; return lst; //NULL daca x nu a fost gasit }