Sunteți pe pagina 1din 2

TDA listLista

TDA lista ca si TDA tablou permite organizarea unei colectii de elemente de un tip oarecare. Spre deosebire de tablou care are ca principala operatie asociata accesul la un element dupa un index in lista, accesul la elemente se face dupa pozitia relativa a elementului respectiv in lista (primu, ultimul si un element aflat intro pozitie oarecare in interiorul listei). Aceasta se schimba permanent dinamic pe masura ce se adauga sau se sterg elemente la lista. Deci o lista este de fapt o segventa dinamica de forma l= (e1,e2,,en); n>=0, n=lungimea listei, n=0, lista este vida. -inserare element -stergere element -cautare element -parcurgerea listei Tip list(GenElm)este GenElm, Bool; ca la Array Listset:multimea listelor care se pof forma cu elemente apartinand GenElm Operatori newlist: ->listset//intoarce lista vida Conb cons/addFirst: GenElm x listset->listset//

adauga un element in fata listei

Cona=

Cdr/newFirst: listset->listset// primeste o lista si intoarce lista fara primul element insertElmAt:listset x index x GenElm -> listset// remove ElmAt:listset x index x GenElm-> listset// remElm:listset x GenElm->listset

sel getElmAt: list x index ->GenElm car: listset-> GenElm//intoarce elemente din prima poztie din lista car length: listset ->int is empty: listset-> Bool//A lista vida Restrictii: (cursurile trecute) Axiome: Cdr: - newlist->restrictii - Cons->cdr(cons(e,l))=l

IsEmpty(newlist)=A IsEmpty(cons(e,l))=F Tema: Append: listset x listset->listset Length(newlist)=0 Length(cons(e,l))=1(unu)+length(l)

Implementari posibile a) Cu tablou 1D cu dimensiunea N<<Nmax Avantaje: - accesul la un element se face in timp constant - adaugarea unui element la sfarsit O(1) - simplitatea de a scrie programe O(1) -parcurgerea O(n) |Dezavantaje: - inserare/stergere intr-o pozitie oarecare O(n) Memoria se aloca static si ca urmare N pozitii pot fii prea multe sau prea putine. Daca sunt prea multe atunci se face risipa de spatiu de memorie. Daca sunt prea putine se procedeaza astfel: - Pas1: se face o noua alocare ptr un vector de dimensiune maxima mult mai mare decat Nmax adecvata nevoilor curente ale problemei de rezolvat - Pas2: se copiaza in primele N pozitii ale noului vector valorile continute in vectorul initial. b) Cu liste inlantuite: O lista inlantuita este un lant de cellule avand urmatorul continut: = unul sau mai multe campuri de informatie care pot contine date de tipuri oarecare = unul sau mai multe campuri adresa care ajuta la realizarea inlantuirii intre cellule, aceasta facandu-se in functie de tipul listei astfel:

Liste: -simplu sau dublu inlantuite - Simple sau circulare: - pe un sens - pe ambele sensuri Avantaje: - inserarea si stergerea la inceput se fac int imp constant O(1) - Inserarea, stergearea, respective cautarea unui element intr-o pozitie oarecare presupune parcurgerea in medie a jumatate de lista, iar in cazul cel mai defavorabil a intregii liste, deci ca ;a tablou. Avantajul care apare aici este ca lista inlantuita este mai rapida deoarece nu mai presupune efectuarea unor deplasari stanga sau dreapta la stergere respective inserare, ci doar simpla copiere a unor adrese care se face in timp constant. O crestere suplimentara a eficientei se obtine si ptr ca de obicei comparatiile sunt mai putin costisitoare ca timp fata de copier - O lista foloseste exact cantitatea de memorie de care are nevoie si se poate extinde pana la umplerea memoriei disponibile Dezavantaje:- sunt mai greu de programat decat tablourile -accesul la un element si inserarea la sfarsit se fac in O(n)