Documente Academic
Documente Profesional
Documente Cultură
V. Cautare
1. Generalitati
2. Cautare secventiala
3. Cautare in vectori ordonati
4. Cautare in arbori binari
Lista simplu inlantuita: primn – prima inreg.; nextn – legatura la urmatoarea inreg.
v = primn, i = 1, p = 0 (posadr = Λ)
cat timp v ≠ Λ
daca cheie(v) = K
atunci p = i, (posadr = v) v = Λ
altfel i = i + 1, v = nextn(v)
daca p = 0
atunci cautare fara succes
altfel cheie gasita in pozitia p (cheie gasita la adresa posadr)
2. Cautare secventiala
Evitarea dublei conditionari a terminarii algoritmului: adaugarea la lista simplu
inlantuita a unui ultim element ce contine cheia K
Pas 1: adauga ca ultima inregistrare o inregistrare cu cheia K, R este prima
inregistrare, i = 1
Pas 2: cat timp cheie(R) ≠ K, R este urmatoarea inregistrare, i = i + 1
Pas 3: daca R este ultima inregistrare atunci cautare fara succes altfel cheia este
gasita in pozitia i
Ex. pt vectori
n = n + 1, K[n] = K, i = 1
cat timp K[i] ≠ K
i=i+1
daca i = n
atunci cautare fara succes
altfel cheie gasita in pozitia i
2. Cautare secventiala
Ex. lista simplu inlantuita
daca primn = Λ
atunci cautare fara succes
altfel
GETCEL(w), cheie(w) = K, nextn(w) = Λ
v = primn
cat timp nextn(v) ≠ Λ
v = nextn(v)
nextn(v) = w
v = primn, i = 1
cat timp cheie(v) ≠ K
v = nextn(v), i = i + 1
daca next(v) = Λ
atunci cautare fara succes
altfel
cheie gasita in pozitia i (la adresa v)
2. Cautare secventiala
• Structura cu cheie multipla
Rezultatul cautarii: vector p care contine identificarile inregistrarilor care au
valoarea cheii egala cu K.
Cautare fara succes: dimensiunea vectorului 0.
q = Λ, p = R
cat timp p ≠ Λ si cheie(p) ≠ K
q=p
daca K < cheie(p)
atunci p = llink(p)
altfel p = rlink(p)
daca p = Λ
atunci eroare cheie absenta
altfel
daca p = R
atunci
daca llink(p) = Λ
atunci R = rlink(p), q = Λ
altfel R = llink(p), q = R, p = rlink(p)
altfel
4. Cautare in arbori binari
Eliminarea nodului cu cheia K: (continuare)
altfel
daca llink(p) = Λ
atunci
daca K < cheie(q)
atunci llink(q) = rlink(p)
altfel rlink(q) = rlink(p)
q=Λ
altfel
daca K < cheie(q)
atunci llink(q) = llink(p)
altfel rlink(q) = llink(p)
q = llink(p), p = rlink(p)
daca q ≠ Λ
cat timp rlink(q) ≠ Λ
q = rlink(q)
rlink(q) = p