Sunteți pe pagina 1din 2

Algoritmi i programare - Tema de laborator 4

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*.
------------------------------------------------------------------------