Sunteți pe pagina 1din 4

Laborator 6 - Algoritmi ce utilizeaza stive sau cozi

1. Radix Sort
Algoritmul de Radix Sort este un algoritm de sortare ce se foloseste de
10 cozi, fiecare coada reprezentand o cifra. La fiecare pas al algoritmului se a
nalizeaza cifra de pe o anumita pozitie pentru toate elementele vectorului, se p
laseaza fiecare numar in coada corespunzatoare si mai apoi noul vector este comp
us de elementele celor 10 cozi parcurse de la coada 0 la coada 9. Procedeul se e
xecuta de n ori, n fiind numarul maxim de cifre pe care-l poate avea un element
din vector. Pentru o mai buna intelegere a algoritmului, urmariti exemplul de ma
i jos. In acest exemplu pentru reprezentarea cozii consideram ca adaugarea se fa
ce prin capatul din dreapta si scoaterea prin capatul din stanga.
Exemplu
Vector initial : {12, 22, 101, 89, 23, 70 , 1 , 45, 77, 905}
Pas 1 (cifra unitatilor):
Coada 0 : 70
Coada 1 : 101, 1
Coada 2 : 12, 22
Coada 3 : 23
Coada 4 :
Coada 5 : 45, 905
Coada 6 :
Coada 7 : 77
Coada 8 :
Coada 9 : 89
Vectorul dupa pasul 1 : {70, 101, 1, 12, 22, 23, 45, 905, 77, 89}
Pas 2 (cifra zecilor):
Coada 0 : 101, 1, 905
Coada 1 : 12
Coada 2 : 22, 23
Coada 3 :
Coada 4 : 45
Coada 5 :
Coada 6 :
Coada 7 : 70, 77
Coada 8 : 89
Coada 9 :
Vectorul dupa pasul 2 : {101, 1, 905, 12, 22, 23, 45, 70, 77, 89}
Pas 2 (cifra sutelor):
Coada 0 : 1, 12, 22, 23, 45, 70, 77, 89
Coada 1 : 101
Coada 2 :
Coada 3 :
Coada 4 :
Coada 5 :
Coada 6 :
Coada 7 :
Coada 8 :
Coada 9 : 905
Vectorul dupa pasul 3 : {1, 12, 22, 23, 45, 70, 77, 89, 101, 905}

Vectorul final : {1, 12, 22, 23, 45, 70, 77, 89, 101, 905}
Urmarind TO DO 1 - 4 din fisierul lab6.c implementati algoritmul Radix S
ort.
2. Problema celebritatilor
Intr-o incapere cu N oameni exista o persoana ce este cunoscuta de toata
lumea. Acea persoana este o celebritate si ea nu cunoaste pe nimeni. Cine este
celebritatea din incapere stiind ca putem pune (de cate ori vrem) intrebarea "A
il cunoaste pe B?" ?. Pentru rezolvarea problemei implementati TO DO 5 - 6 din f
isierul lab6.c .
Hint : Folositi o stiva in care sunt toate persoanele din incapere.
3. Conversia unei expresii matematice din scrierea infixata in scrierea
postfixata (forma poloneza inversa)
Avantajele scrierii postfixate fata de scrierea infixata :
a. Parantezele pentru fortarea prioritatii de aplicare a operatorului nu
mai sunt necesare.
b. Evaluarile sunt usor de efectuat cu ajutorul calculului.
c. Evidentierea clara a ordinii de efectuare a operatiilor.
Pentru realizarea acestei conversii vom avea nevoie de o stiva in care v
om retine operatorii si ii vom scoate in functie de un set de reguli definite pe
baza prioritatilor urmatoare :
Prioritate 1 : ([{
Prioritate 2 : )]}
Prioritate 3 : +Prioritate 4 : */
Algoritm :
cat timp (!sfarsit expresie infixata)
citire token
daca token este numar
adauga la expresia rezultat
daca token este o paranteza deschisa
adauga token in stiva
daca token este )]}
cat timp varful stivei este diferit de ([{
scoate element din stiva
adaugare element la expresia rezultat
scoate paranteza deschisa din stiva
daca token este un operator
1. cat timp varful stivei nu are o prioritate ma
i
mica decat operatorul curent se trece operatorul
din varful stivei in expresia rezultat
2. se introduce token in stiva
cat timp stiva nu este vida
scoate element din stiva
adaugare element la expresia rezultat
Exemplu:
Expresie infixata : 3 + 4 * 1 + ( 2 - 3 )
expresie infixata : + 4 * 1 + ( 2 - 3 )
operatori :

expresie posfixata : 3
expresie infixata : 4 * 1 + ( 2 - 3 )
operatori : +
expresie posfixata : 3
expresie infixata : * 1 + ( 2 - 3 )
operatori : +
expresie posfixata : 3 4
expresie infixata : 1 + ( 2 - 3 )
operatori : + *
expresie posfixata : 3 4
expresie infixata : + ( 2 - 3 )
operatori : + *
expresie posfixata : 3 4 1
+ are o priotitate mai mica decat * => scoate pana gasim un op cu
prioritate strict mai mica
decat prioritatea lui +
expresie infixata : + ( 2 - 3 )
operatori :
expresie posfixata : 3 4 1 * +
expresie infixata : ( 2 - 3 )
operatori : +
expresie posfixata : 3 4 1 * +
expresie infixata : 2 - 3 )
operatori : + (
expresie posfixata : 3 4 1 * +
expresie infixata : - 3 )
operatori : + (
expresie postfixata : 3 4 1 * + 2
expresie infixata : 3 )
operatori : + ( expresie postfixata : 3 4 1 * + 2
expresie infixata )
operatori : + ( expresie postfixata : 3 4 1 * + 2 3
gasim paranteza inchisa => scoatem tot ce avem in stiva pana la o
paranteza deschisa si paranteza deschisa
expresie infixata :
operatori : +
expresie postfixata : 3 4 * + 2 3 expresie postfixata : 3 4 1 * + 2 3 - +
4. Evaluarea unei expresii matematice in scriere postfixata
Algoritm :
cat timp (!sfarsit expresie postfixata)
citire token
token este numar

adaugare token pe stiva


token este operator
se extrage y din varful
se extrage x din varful
se evalueaza x operator
se adauga rezultatul pe
rezultat = valoarea ramasa in stiva

stivei
stivei
y
stiva

S-ar putea să vă placă și