Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sda-aa:laboratoare:05 [2021/03/28 22:20]
cristian.rusu [3. Arbori binari]
sda-aa:laboratoare:05 [2021/03/29 12:00] (current)
cristian.rusu
Line 162: Line 162:
  
 <note important>​Nodurile frunză nu au descendenți:​nodul stâng și nodul drept pointează la NULL și nu trebuie adăugate în coadă.</​note>​ <note important>​Nodurile frunză nu au descendenți:​nodul stâng și nodul drept pointează la NULL și nu trebuie adăugate în coadă.</​note>​
 +
 +
 +==== 4. Exerciții ====
 +
 +Scrieți un program care folosește arbori pentru a evalua expresii matematice cu cifre.
 +
 +Să considerăm o expresie matematică:​ 2+4*5+1*2*3.
 +
 +Pentru a crea un arbore de parsare avem nevoie să folosim următoarele structuri:
 +   * stivă rezultat - folosită pentru a reține operanzii si rezultatele intermediare ale operațiilor parcurse până la un moment dat
 +   * stivă de operatori - folosit pentru a reține operatorii
 +
 +<​code>​
 +       +
 +      / \
 +     ​2 ​   +
 +         / \
 +        *    *
 +       / \  / \
 +      4  5 1   *
 +              / \
 +             ​2 ​  ​3 ​
 +</​code>​
 +
 +Algoritmul presupune:
 +   * Se parcurge expresia,​termen cu termen (un termen poate fi operator sau operand)
 +   * Dacă termenul curent este operand aceasta se adaugă in stivă rezultat și se trece la termenul urmator
 +   * Daca termenul curent este operator (!)
 +       * Daca stiva operatorilor este vidă,se adaugă operatorul in stiva de operatori și se trece la termenul urmator
 +       * Dacă stiva nu este vidă:
 +            * Și operatorul curent are prioritate mai mare decât capul stivei (ex: crt este *,​top(stivă) este +) se adaugă operatorul în stivă și se trece la termenul următor
 +            * Și operatorul curent are prioritate mai mică decât capul stivei (ex: crt este +,​top(stivă) este *)
 +                 * Se scot din stivă rezultatele ultimelor două rezultate
 +                 * Se scoate un operator din stiva operatorilor
 +                 * Se creează un nou rezultat intermediar,​aplicând operatorul extras pe cele două rezultate de mai sus
 +                 * Acest rezultat intermediar se adaugă în stiva de rezultate
 +                 * Se verifică condițiile de la ! (se compară din nou același operator curent cu operatorul din vârful stivei).
 +
 +Construiți arborele asociat expresiei.
 +
 +{{:​sda-aa:​laboratoare:​ast_stiva.jpg?​800|}}
  
sda-aa/laboratoare/05.1616959210.txt.gz · Last modified: 2021/03/28 22:20 by cristian.rusu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0