Documente Academic
Documente Profesional
Documente Cultură
Cozi
SD 2019/2020
Conţinut
I Student, i
I (Adriana, George, Luiza, Maria, Daniel)
I Examene
I (Mate, Logică, SD, ACSO, IP, ENG)
I Zilele săptămânii
I (L, M, Mi, J, V, S, D)
I Lunile anului
I (Ian, Feb, Mar, Apr, Mai, Iun, Iul, Aug, Sep, Oct, Nov, Dec)
I Relat, ii:
– e0 primul element al listei;
– en−1 ultimul element al listei;
– ei elementul predecesor lui ei+1 .
I listaVida()
I intrare: nimic
I insereaza()
I intrare:
I L = (e0 , · · · , en−1 ), k ∈ Nat, e ∈ Elt
I ies, ire:
I L = (· · · , ek−1 , e, ek , · · · ), dacă 0 ≤ k ≤ n
I eroare ı̂n caz contrar
L = (a, b, c, d, e, f , g )
I insereaza(L, 0, x) ⇒ L = (x, a, b, c, d, e, f , g )
Obs. indexul elementelor a, · · · , g cres, te cu 1.
I insereaza(L, 2, x) ⇒ L = (a, b, x, c, d, e, f , g )
I insereaza(L, 7, x) ⇒ L = (a, b, c, d, e, f , g , x)
I ies, ire:
I L = (· · · , ek−1 , ek+1 , · · · ), dacă 0 ≤ k ≤ n − 1
I eroare ı̂n caz contrar
I ies, ire:
I L = (· · · , ek−1 , ek+1 , · · · ), dacă 0 ≤ k ≤ n − 1
I eroare ı̂n caz contrar
Exemple:
L = (a, b, c, d, e, f , g )
I elimina(L, 2) ⇒ L = (a, b, d, e, f , g )
Obs. indexul elementelor d, · · · , g descres, te cu 1.
I ies, ire:
I ek , dacă 0 ≤ k ≤ n − 1
I eroare ı̂n caz contrar
I ies, ire:
I ek , dacă 0 ≤ k ≤ n − 1
I eroare ı̂n caz contrar
Exemple:
L = (a, b, c, d, e, f , g )
I alKlea(L, 0) ⇒ a
I alKlea(L, 2) ⇒ c
I alKlea(L, 6) ⇒ g
I alKlea(L, 20) ⇒ eroare
I alKlea(L, −2) ⇒ eroare
FII, UAIC Curs 4 SD 2019/2020 9 / 58
LLin – operat, ii
I elimTotE()
I intrare:
I L = (e0 , · · · , en−1 ), e ∈ Elt
I ies, ire:
I lista L din care s-au eliminat toate elementele egale cu e
I elimTotE()
I intrare:
I L = (e0 , · · · , en−1 ), e ∈ Elt
I ies, ire:
I lista L din care s-au eliminat toate elementele egale cu e
Exemple:
L = (a, b, c, a, b, c, a)
I elimTotE(L, a) ⇒ (b, c, b, c)
I elimTotE(L, c) ⇒ (a, b, a, b, a)
I elimTotE(L, d) ⇒ (a, b, c, a, b, c, a)
I parcurge()
I intrare:
I L = (e0 , · · · , en−1 ), o procedură / funct, ie viziteaza()
I ies, ire:
I lista L ı̂n care toate elementele au fost procesate aplicând viziteaza()
I parcurge()
I intrare:
I L = (e0 , · · · , en−1 ), o procedură / funct, ie viziteaza()
I ies, ire:
I lista L ı̂n care toate elementele au fost procesate aplicând viziteaza()
Exemple:
L = (1, 2, 3, 1, 2, 3)
I poz()
I intrare:
I L = (e0 , · · · , en−1 ), e ∈ Elt,
I ies, ire:
I prima pozit, ie pe care apare e ı̂n L sau
I −1 dacă e nu apare ı̂n L.
I poz()
I intrare:
I L = (e0 , · · · , en−1 ), e ∈ Elt,
I ies, ire:
I prima pozit, ie pe care apare e ı̂n L sau
I −1 dacă e nu apare ı̂n L.
Exemple:
L = (a, b, c, a, b, c, d)
I poz(L, a) ⇒ 0
I poz(L, c) ⇒ 2
I poz(L, d) ⇒ 6
I poz(L, x) ⇒ −1
I lung()
I intrare:
I L = (e0 , · · · , en−1 ),
I ies, ire:
I n – lungimea listei L.
I lung()
I intrare:
I L = (e0 , · · · , en−1 ),
I ies, ire:
I n – lungimea listei L.
Exemple:
L = (a, b, c, a, b, c, d)
I lung(L) ⇒ 7
L.ultim int
I L este o structură
I L.tab – un câmp de tip tablou pentru memorarea elementelor;
I insereaza()
I inserează e pe poziţia k;
I excepţii:
I k < 0, k > L.ultim + 1 (n)
I L.ultim = Max − 1.
procedure insereaza(L, k, e)
begin
if (k < 0 or k > L.ultim + 1) then
throw “eroare-pozitie incorecta”
if (L.ultim >= Max − 1) then
throw “eroare-spatiu insuficient”
for j ← L.ultim downto k do
L.tab[j + 1] ← L.tab[j]
L.tab[k] ← e
L.ultim ← L.ultim + 1
end
I parcurge()
L.prim • L.ultim •
e0 • e1 • ... en−1 •
I insereaza()
I excepţii:
I lista vidă;
I k = 0;
I k = n;
I k < 0, k > n.
I Cazul general
ek−1 • ek •
I Cazul general
ek−1 • ek •
I Cazul general
ek−1 • ek •
I Cazul general
ek−1 • ek •
e •
I Cazul general
ek−1 • ek •
e •
L.prim • L.ultim •
L.prim • L.ultim •
L.prim • L.ultim •
L.prim • L.ultim •
e •
L.prim • L.ultim •
e •
L.prim •
e0 •
L.prim •
e0 •
L.prim •
e e0 •
L.prim •
e • e0 •
L.prim •
e • e0 •
procedure ori2Punct(p)
begin
p.x ← p.x ∗ 2
p.y ← p.y ∗ 2
end
procedure ori2Linie(p)
begin
parcurge(L, ori2Punct())
end
I translatează punct:
I Obiecte:
L = (e0 , · · · , en−1 ), n ≥ 0, ei ∈ Elt, e0 ≤ e1 ≤ · · · ≤ en−1
I Operat, ii:
I listaVida()
I intrare: nimic
I ies, ire: L = () (lista cu zero elemente)
I insereaza()
I intrare: L = (e0 , . . . , en−1 ), e ∈ Elt
I ies, ire: L = (· · · , ek−1 , e, ek , · · · ), dacă ek−1 ≤ e ≤ ek
(e−1 = −∞, en = +∞)
I elimina()
I intrare: L = (e0 , . . . , en−1 ), e ∈ Elt
I ies, ire: L = (· · · , ek−1 , ek+1 , · · · ), dacă e = ek
eroare ı̂n caz contrar
I alKlea()
I parcurge()
I poz()
function poz(L, e)
begin
p ← 0; q ← L.ultim
m ← (p + q)/2
while (L.tab[m]! = e and p < q) do
if (e < L.tab[m]) then
q ← m–1
else
p ←m+1
m ← (p + q)/2
if (L.tab[m] == e) then
return m
else
return −1
end
I Aplicat, ii directe
I Istoricul paginilor web vizitate ı̂ntr-un browser;
I Aplicat, ii indirecte
I Structură de date auxiliară ı̂n anumit, i algoritmi;
I Obiecte:
Liste ı̂n care se cunoas, te vechimea elementelor introduse:
liste LIFO (Last-In-First-Out).
I Operat, ii:
I stivaVida()
I intrare: nimic
I ies, ire: S = () (lista vidă)
I esteVida()
I intrare: S ∈ Stiva
I ies, ire:
– true dacă S este vidă;
– false dacă S nu este vidă.
I pop()
I intrare: S ∈ Stiva
I ies, ire:
– S din care s-a eliminat ultimul element introdus
(cel cu vechimea cea mai mică);
– eroare dacă S este vidă.
I top()
I intrare: S ∈ Stiva
I ies, ire:
– ultimul element introdus ı̂n S (cel cu vechimea cea mai mică);
– eroare dacă S este vidă.
FII, UAIC Curs 4 SD 2019/2020 38 / 58
Stiva – implementare cu liste
sau
I Reprezentarea obiectelor
Max-1
S.tab Elt[Max] e0 ... en−1
I Reprezentarea obiectelor
S • en−1 •
en−2 •
..
.
e0 •
I Aplicat, ii directe
I Liste / fire de as, teptare;
I Aplicat, ii indirecte
I Structură de date auxiliară ı̂n anumit, i algoritmi.
I Obiecte:
Liste ı̂n care se cunoas, te vechimea elementelor introduse:
liste FIFO (First-In-First-Out).
I Operat, ii:
I coadaVida()
I intrare: nimic
I ies, ire: C = () (lista vidă)
I esteVida()
I intrare: C ∈ Coada
I ies, ire:
– true dacă C este vidă;
– false dacă C nu este vidă.
I elimina()
I intrare: C ∈ Coada
I ies, ire:
– C din care s-a eliminat primul element introdus
(cel cu vechimea cea mai mare);
– eroare dacă C este vidă.
I citeste()
I intrare: C ∈ Coada
I ies, ire:
– primul element introdus ı̂n C (cel cu vechimea cea mai mare);
– eroare dacă C este vidă.
FII, UAIC Curs 4 SD 2019/2020 47 / 58
Coada – implementare cu liste
I Reprezentarea obiectelor
Max-1
C.tab Elt[Max] e0 ... en−1
C.prim p q C.ultim
I Reprezentarea obiectelor
Max-1
C.tab Elt[Max] e0 ... en−1
C.prim p q C.ultim
Max-1
C.tab Elt[Max] ... en−1 e0 ... ei
C.ultim q p C.prim
I Reprezentarea obiectelor
C.prim • C.ultim •
e0 • e1 • ... en−1 •
I notat, ia infixată
I a+b
I a + (b ∗ 2)
I notat, ia postfixată
I ab+
I a b 2 ∗+
I reguli de precedent, ă
I a+b∗2
Exemplu: a + b ∗ (c + d) + e
↓
inf.tab Elt[Max] a + b ∗ ( c + d ) + e
postf.tab Elt[Max]
S (stiva)
Exemplu: a + b ∗ (c + d) + e
↓
inf.tab Elt[Max] a + b ∗ ( c + d ) + e
postf.tab Elt[Max] a
S (stiva)
Exemplu: a + b ∗ (c + d) + e
↓
inf.tab Elt[Max] a + b ∗ ( c + d ) + e
postf.tab Elt[Max] a
S (stiva)
Exemplu: a + b ∗ (c + d) + e
↓
inf.tab Elt[Max] a + b ∗ ( c + d ) + e
postf.tab Elt[Max] a b
S (stiva)
Exemplu: a + b ∗ (c + d) + e
↓
inf.tab Elt[Max] a + b ∗ ( c + d ) + e
postf.tab Elt[Max] a b
S (stiva)
∗
+
Exemplu: a + b ∗ (c + d) + e
↓
inf.tab Elt[Max] a + b ∗ ( c + d ) + e
postf.tab Elt[Max] a b
S (stiva)
(
∗
+
Exemplu: a + b ∗ (c + d) + e
↓
inf.tab Elt[Max] a + b ∗ ( c + d ) + e
postf.tab Elt[Max] a b c
S (stiva)
(
∗
+
Exemplu: a + b ∗ (c + d) + e
↓
inf.tab Elt[Max] a + b ∗ ( c + d ) + e
postf.tab Elt[Max] a b c
S (stiva)
+
(
∗
+
Exemplu: a + b ∗ (c + d) + e
↓
inf.tab Elt[Max] a + b ∗ ( c + d ) + e
postf.tab Elt[Max] a b c d
S (stiva)
+
(
∗
+
Exemplu: a + b ∗ (c + d) + e
↓
inf.tab Elt[Max] a + b ∗ ( c + d ) + e
postf.tab Elt[Max] a b c d +
S (stiva)
(
∗
+
Exemplu: a + b ∗ (c + d) + e
↓
inf.tab Elt[Max] a + b ∗ ( c + d ) + e
postf.tab Elt[Max] a b c d +
S (stiva)
∗
+
Exemplu: a + b ∗ (c + d) + e
↓
inf.tab Elt[Max] a + b ∗ ( c + d ) + e
postf.tab Elt[Max] a b c d +
S (stiva)
∗
+
Exemplu: a + b ∗ (c + d) + e
↓
inf.tab Elt[Max] a + b ∗ ( c + d ) + e
postf.tab Elt[Max] a b c d + ∗
S (stiva)
Exemplu: a + b ∗ (c + d) + e
↓
inf.tab Elt[Max] a + b ∗ ( c + d ) + e
postf.tab Elt[Max] a b c d + ∗ +
S (stiva)
Exemplu: a + b ∗ (c + d) + e
↓
inf.tab Elt[Max] a + b ∗ ( c + d ) + e
postf.tab Elt[Max] a b c d + ∗ +
S (stiva)
Exemplu: a + b ∗ (c + d) + e
↓
inf.tab Elt[Max] a + b ∗ ( c + d ) + e
postf.tab Elt[Max] a b c d + ∗ + e
S (stiva)
Exemplu: a + b ∗ (c + d) + e
↓
inf.tab Elt[Max] a + b ∗ ( c + d ) + e
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
Exemplu: a + b ∗ (c + d) + e
↓
inf.tab Elt[Max] a + b ∗ ( c + d ) + e
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
Exemplu: a b c d + ∗ + e+
↓
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
Exemplu: a b c d + ∗ + e+
↓
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
Exemplu: a b c d + ∗ + e+
↓
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
b
a
Exemplu: a b c d + ∗ + e+
↓
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
c
b
a
Exemplu: a b c d + ∗ + e+
↓
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
d
c
b
a
Exemplu: a b c d + ∗ + e+
↓
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
c
b
a
Exemplu: a b c d + ∗ + e+
↓
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
b
a
Exemplu: a b c d + ∗ + e+
↓
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
c +d
b
a
Exemplu: a b c d + ∗ + e+
↓
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
b
a
Exemplu: a b c d + ∗ + e+
↓
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
Exemplu: a b c d + ∗ + e+
↓
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
b ∗ (c + d)
a
Exemplu: a b c d + ∗ + e+
↓
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
Exemplu: a b c d + ∗ + e+
↓
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
Exemplu: a b c d + ∗ + e+
↓
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
a + b ∗ (c + d)
Exemplu: a b c d + ∗ + e+
↓
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
e
a + b ∗ (c + d)
Exemplu: a b c d + ∗ + e+
↓
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
a + b ∗ (c + d)
Exemplu: a b c d + ∗ + e+
↓
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
a + b ∗ (c + d) + e
Exemplu: a b c d + ∗ + e+
↓
postf.tab Elt[Max] a b c d + ∗ + e +
S (stiva)
a + b ∗ (c + d) + e
function valPostfix(postfix)
begin
S ← stivaVida()
while (not esteVida(postfix)) do
x ← citeste(postfix); elimina(infix)
if (operand(x) then
push(S, x)
else
drp ← top(S); pop(S)
stg ← top(S); pop(S)
val ← stg op(x) drp
push(S, val)
val = top(S); pop(S)
return val
end