Sunteți pe pagina 1din 4

Tema 2 - Stive, cozi, liste înl nµuite

1. S  se implementeze o stiv  sau o coad  utilizând liste înl nµuite. Creaµi iniµial


o structur  NOD cu dou  câmpuri - un câmp de tip int pentru informaµie ³i
un camp de tip pointer la NOD pentru leg tura la elementul urm tor. Creaµi
apoi o structur  STIVA, care s  aib  un câmp de tip pointer la NOD, care
reprezint  vârful stivei. De asemenea structura STIVA trebuie s  conµin 
metodele PUSH, POP ³i TOP. PUSH adaug  un element în vârful stivei, POP
extrage elementul din vârful stivei, iar TOP returneaz  valoarea aat  în vârful
stivei. Ad ugaµi de asemenea o metod  ISEMPTY, care veric  dac  stiva este
vid . De preferinµ  utilizaµi ³i un constructor, care s  iniµializeze vârful stivei
cu NULL. În funcµia main a programului se va declara o stiva. Apoi se vor
introduce n elemente, cu n citit de la tastatur . Aceste elemente se extrag
apoi pe rând ³i se a³az  în ordinea de extragere. (1p)
2. Se cite³te dintr-un ³ier o expresie aritmetic  alc tuit  din numere întregi f r 
semn, operatorii aritmetici +, −, ∗, / ³i paranteze rotunde. Atenµie, carac-
terele din ³ir NU sunt desp rµite prin spaµii! S  se construiasc  forma polonez 
postxat  pentru expresia aritmetic  dat  ³i s  se evalueze expresia. Utilizaµi
stive. (Este de preferat utilizarea unui vector pentru stocarea elementelor
stivei. Se cere utilizarea unei structuri STIVA!) (4p)
Punctajul maxim se acord  dac : se pot utiliza ³i numere cu mai mult de o
cifr , sunt semnalate erorile din expresie ³i nu se blocheaz  programul, dac 
expresia nu este corect .
Exemple:

• 2 + + + 3 nu este o expresie corect . Programul semnaleaz  c  exist 


prea mulµi operatori.
• 2 ∗ ((3 + 4) nu este o expresie corect . Programul semnaleaz  faptul c 
parantezarea nu este corect .
Observaµie: chiar dac  num rul de paranteze deschise este egal cu cel
de paranteze închise, parantezarea poate s  nu e corect . De exemplu
))(( sau ()))((.
• 23# + a nu este o expresie corect . Programul semnaleaz  faptul c  apar
caractere nepermise #, a.

1
• 3 ∗ 4 − 3 ∗ (24 − 12) − 7. Programul returneaz  valoarea −31. Forma
polonez  postxat  este 34 ∗ 32412 − ∗ − 7−
Algoritmul este descris în documentaµia de pe e-learning.
3. S  se implementeze o coad  circular . Pentru aceasta se cere crearea unei
structuri COADA care s  conµin  un câmp de tip vector de int numit DATA,
care stocheaz  elementele din coad , un câmp SIZE_MAX de tip int, care
reprezint  capacitatea maxim  a cozii,dou  câmpuri de tip int BEGIN ³i END,
care reprezint  poziµia în vectorul DATA a primului ³i respectiv poziµia de dup 
ultimul element din coad . De asemenea se cer în structura COADA, metodele
PUSH, POP, FRONT, ISEMPTY, unde PUSH adaug  un element dup  ul-
timul element din coada, POP extrage primul element din coad , FRONT
returneaz  valoarea aat  la începutul cozii ³i ISEMPTY veric  dac  este
vid  sau nu coada. În funcµia main se declar  o variabil  de tip COADA, se
insereaz  pe rând n elemente, cu n citit de la tastatur , apoi se extrag aceste
elemente pe rând ³i se a³az  în ordinea extragerii. (1p)
4. S  se implementeze algoritmul de sortare Bucket-sort utilizând liste dublu
înl nµuite. Utilizaµi o structur  LISTA_DUBLU, care s  aib  ca membrii un
pointer la NOD, reprezentând capul listei ³i metodele:
• INSERT_SORT - insereaz  o cheie într-o list  ordonat  pe poziµia potri-
vit .
• MERGE - une³te lista cu alt  list  transmis  ca parametru
• INSERT - insereaz  în capul listei.
• PRINT - a³az  elementele stocate în list .

Utilizaµi un constructor pentru iniµializarea capului listei cu NULL.


Structura NOD utilizat  în lista dublu înl nµuit  trebuie s  aib  câmpurile
INFO, NEXT ³i PREV.
Algoritmul poate  g sit în cartea "Introduction to Algorithms third edition"
de T.C. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein (2p)
5. S  se implementeze o list  simplu înl nµuit  cu funcµionalit µile descrise în
continuare. Se cere utilizarea unei structuri NOD care are dou  câmpuri: un
câmp int pentru informaµie ³i un câmp de tip pointer la NOD pentru leg tura
câtre urm torul element. Se cere utilizarea unei structuri LISTA care are ca
menbru un pointer la NOD reprezentând capul listei ³i metodele:
• INSERT - insereaz  un element în capul stivei (0.25 p)

2
• DELETE -³terge un element din list , (0.25 p)
• ISEMPTY - veric  dac  lista e vid  (0.25 p)
• INVERSE - inverseaz  lista în compelxitate O(n), f r  a folosi mai mult
decât o zon  de memorie constant , cu excepµia celei ocupate de list 
(adic  f r  a construi o a dou  list ) (1 p)
• INSERT_AFTER - insereaz  o cheie k dup  un nod cu o anumit  cheie
m dat , sau la cap tul listei, dac  m nu exist  în list . (0.5 p)
• INSERT_N_POZ - insereaz  de n ori cheia k pe poziµia p, dac  lista are
cel puµin p elemente, sau la sfâr³itul listei altfel. (1p)
Utilizaµi un constructor pentru a iniµializa capul listei cu NULL. (0.25p)

Figure 1: Reprezentarea etajului unei cl diri

6. Un anumit etaj al unei cl diri este reprezentat schematic sub forma unei ma-
trice ce conµine valorile -1 ³i 0, unde -1 reprezint  zid ³i 0 reprezint  spaµiu
liber. Pereµii sunt de grosime 1 ³i u³ile nu sunt marcate (se consider  tot
perete).
a. Determinaµi num rul de înc peri ale etajului respectiv. (1p)
b. Determinaµi înc perea cu suprafaµa maxima. (1p)
c. Care perete poate  d râmat (o poziµie maract  cu -1 se va marca cu 0)
a. î. s  se obµin  o înc pere de suprafaµ  maxim ? (2p)
În vericarea apartenenµei la aceea³i camer  în matrice se consider  doar
vecin t µile pe orizontal  ³i vertical .

Evitaµi utilizarea recursivit µii.

3
a) b)

Figure 2: a. Camerele colorate cu culori diferite. b. Dac  se ³terge elementul de zid


marcat cu galben se obµine cea mai mare camer  posibil .

Exemplu: Se consider  etajul reprezentat de c tre matricea din gur  1. Este


o matrice de dimensiuni 10×12 în care pereµii sunt coloraµi cu gri (deci valorile
-1) ³i golurile corespun toare camerelor cu alb.
Se observ  c  exist  5 camere, ecare marcate cu alt  culoare în gura 2
a. Camera marcat  cu galben are suprafaµa de 18 unit µi, camera ro³ie de 7
unit µi, camera albastr  de 9 unit µi, camera cyan de 7 unit µi ³i camera verde
de 14 unit µi.
În gura 2b. se observ  faptul c , dac  se elimin  zidul de pe poziµia marcat 
cu galben, se unesc trei înc peri ³i se obµine ce mai mare înc pere posibil , cu
suprafaµa de 40 de unit µi.
7. Se consider  un labirint reprezentat printr-o matrice în care zidurile sunt mar-
cate prin −1 ³i drumurile prin 0. În labirint se a  un ³oricel pe poziµia (x0 , y0 )
³i o bucat  de brânz  pe poziµia (x1 , y1 ). S  se g seasc  un drum (de preferinµ 
de lungime minim ) de la ³oricel la brânz . Nu utilizaµi recursivitate! Utilizaµi
o coad . (3p)

Evaluare: Rezolvaµi la alegere probleme. Fiecare problem  are al turi punctajul


aferent. Se acord  pentru aceast  tem  suma punctajelor problemelor rezolvate,
dar maxim nota 10. Un punct este din ociu. Se tine cont de criteriile generale de
evaluare, prezentate în lista de criterii de pe platform  de e-learning de la prima
unitate de înv µare.