Sunteți pe pagina 1din 4

4.

TAD MultiDictionar (MultiMap) implementare folosind o lista simplu inlantuita


alocata dinamic.

Enunt.
Sa se alcatuiasca meniul unui restaurant. Sa se atribuie fiecarei categorii (Aperitive,
Supe,
Fel principal, Desert, Bauturi, etc) preparatele specifice. La final se vor afisa toate
categoriile
impreuna cu preparatele din cadrul fiecareia sub forma categorie-lista de preparate.

Domeniu: MultiDictionar={md/md-multidictionar ale carui elemente sunt de tip


TElement (c,l)
-retinute ca perechi cheie-lista de valori}

MultiDictionarul este un tip abstract de data care contine elemente retinute sub
forma <cheie,valoare>.
TValoare=TLista (o cheie are o lista de valori asociate TElement)

TElement

Nod

MD

c:TCheie

e:TElement

prim:|Nod

l:TLista

urm : |Nod

Iterator
md: MD
curent: |Nod
iterL: IteratorLista

operatii (interfata TAD-ului MultiDictionar)

creeaza(md)
pre: true
post:dMD, md este multidictionarul vid (fara elemente)

adauga(md, c, v)

pre: mdMD, cTCheie, vTValoare,


post: mdMD, md=md+(c, v) (se adauga n multidictionar perechea (c, v))

cauta(md, c, v)
pre: mdMD, cTCheie
post: cauta= adevarat daca (c,v)md, caz n care vTValoare e valoarea
asociata cheii c
fals n caz contrar, caz n care v= TValoare 0

sterge(md, c, v)
pre: mdMD, cTcheie, vTElement
post: lTValoare
perechea (c, v) este stearsa din multidictionar, daca c md
l e noua lista a valorilor asociate cheii c (posibil vida)

dim(md)
pre: dD
post: dim= dimensiunea multidictionarului md (numarul de elemente) N*

vid(d)
pre: mdMD
post: vid= adevarat n cazul n care md e multidictionarul vid
fals n caz contrar

chei(md, m)
pre: mdMD
post: mM, m este multimea cheilor din multidictionarul md

valori(md, c)

pre: mdMD
post: cCol, c este colectia valorilor din multidictionarul md

perechi(md, m)
pre: mdMD
post: mM, m este multimea perechilor (cheie, lista valori) din multidictionarul
md

iterator(md, i)
{se creeaza un iterator pe multidictionarul md}
pre: md MD
post:i I, i este iterator pe multidictionarul md

distruge(md)
pre: md MD
post: multidictionarul md a fost 'distrus' (spatiul de memorie alocat a fost
eliberat)

creeazaI(md,i)
pre: md MD
post:iIteratorLista-a fost creat iteratorul i pe lista

urmator(i)
pre:iIteratorLista
post:i'=i+1 -iteratorul refera urmatorul element din lista

valid(i)
pre: iIteratorLista
post: True -iteratorul este valid(refera un element in lista, este diferit de NIL)
False-in caz contrar

element(i,e)
pre: iIteratorLista
post: e- de tip <c,v>