Termen de realizare: sptmna 29 noiembrie-3decembrie 2010
Observaie: Tema se consider "acceptat" dac au fost soluionate corect cel puin treiprobleme. Obiective * familiarizarea cu tipurile abstracte de date: liste, stive, cozi. ------------------------------------------------------------------------ Probleme propuse 1. S se scrie un subprogram care parcurge elementele unei liste liniare nlantuite n ordine invers, fr a utiliza spaiu suplimentar de memorie (de dimensiunea listei). 2. S se scrie o funcie care testeaz dac dou liste liniare memorate cu pointeri sunt egale. 3. Se dau *L1* i *L2, *dou liste liniare de numere ntregi, ordonate cresctor i memorate cu pointeri. S se scrie o funcie care returneaz lista format din elementele lui *L1* i ale lui *L2* ordonate cresctor. Eventualele apariii multiple ale unui element vor fi pstrate n lista rezultat. 4. Se d o list liniar simplu nlnuit. Fr a altera informaia util din nodurile listei, s se decid dac lista conine bucle, i.e. adresa succesor a ultimului element nu este *NULL* ci adresa unui nod din list. 5. Se consider un tablou unidimensional de dimensiune mare care conine elemente alocate (ocupate) i elemente nealocate (disponibile). Ne putem imagina c acest tablou reprezint memoria unui calculator (element al tabloului = cuvnt de memorie). Zonele ocupate (sau zonele libere) din tablou sunt gestionate cu ajutorul unei liste nlnuite. Asupra tabloului se execut urmtoarele operaii: * *aloca(m)//*- determin o secven de *m* elemente succesive nealocate. Adresa i lungimea acesteia sunt adugate ca un nou element la lista zonelor ocupate (sau o elimin din lista zonelor libere). Funcia returneaz adresa zonei determinate.Dac nu se poate aloca o asemenea secven funcia returneaz valoarea -1. * *elibereaza(a, m)* - disponibilizeaz secvena de lungime *m* ncepnd cu adresa *a*. Lista zonelor ocupate (sau a zonelor libere) este actualizat corespunztor. * *defragmenteaza()* - rearanjeaz zonele ocupate astfel nct s existe o singur zona disponibil (sau compactarea zonelor disponibile); Lista zonelor ocupate (sau a zonelor libere) va fi actualizat corespunztor. 6. Fie *A* un alfabet. Presupunem c irurile peste *A* sunt reprezentate prin liste liniare simplu nlnuite. S se scrie subprograme pentru operaiile de mai jos: * fiind dat un ir *w=a1 ... an*, determin oglinditul su *o(w)= an ... a1*; * fiind dat un ir *w*, decide dac *w* este de forma *uo(u)*; * fiind date 2 iruri *w1*i *w2,* decide dac *w**1<= w2* (se consider ordinea lexicografic). 7. Fie *S1* o stiv ce conine ca informaii n noduri, numere din intervalul *[1,n]* ordonate cresctor de la baz la vrf i S2 o stiv ce conine ca informaii n noduri, numere din intervalul *[n+1,n+m]* ordonate crescator de la baza la vrf. S se construiasc o stiv ce conine numerele din cele 2 stive, *S1* i *S2*, ordonate cresctor de la baz la vrf. 8. Implementai algoritmii pentru operaiile tipurilor de date*Stiva* i *Coada*. ------------------------------------------------------------------------