Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrarea de laborator nr. 4-5
la Structuri de date i algoritmi
A efectuat:
st. gr. AI-161 V.Platon
A verificat:
dr., conf.univ. M. Kulev
Chiinu -2017
Lucrarea de laborator nr. 4-5
Tema: Implementarea tipului de date abstract Arbore binar geniralizat in
limbajul C. Algoritmi iterativi si algoritmi recursivi.
Mersul lucrrii:
Noiuni principale din teorie i metode folosite:
Stiva
O stiv este o structur de date ale crei elemente sunt considerate a fi puse unul peste altul,
astfel nct orice element adugat se pune n vrful stivei, iar extragerea unui element se poate
face numai din vrful acesteia, n ordinea invers celei n care elementele au fost introduse.
Principiu de lucrarea stivei este LIFO( Last in First Out) ce inseamna ultimul a intrat,
primul a iesit. Deseori stiva este comparata cu gramada de placi. Pentru a lua placa a doua din
sus, trebuie mai intii de luat prima placa.
Exemplul de implimentarea in C
struct stack
{
nod *adrnod;
struct stack *prev;
};
Operaii cu stive
Creare
Pentru a crea o stiva vid se inializeaz vrful stivei cu 1 (vrful stivei indic ntotdeauna
poziia ultimului element, acestea fiind memorate ncepnd cu poziia 0).
Inserare (Push)
Pentru a insera un element e n vrful stivei S (operaia push) este necesar, n primul rnd,
verificarea stivei pentru a stabili dac este sau nu plin. Dac acest lucru este ndeplinit, se
memoreaz elementul i se incrementeaz dimensiunea; n caz contrar sarcina nu se poate
ndeplini.
int push(nod* v)
{
els *c;
c = (els*)malloc(sizeof(els));
if (c == NULL) return 0;
c->prev = top;
top = c;
c->adrnod = v;
return 1;
}
Extragere (Pop)
Pentru a extrage un element din vrful stivei (operaia pop) trebuie ca stiva s nu fie vid. Dac
nu este, atunci se reine valoarea din vrful stivei ntr-o variabil e i se decrementeaz vrful.
nod* pop()
{
els *c;
nod* v;
c = top;
v = c->adrnod;
top = c->prev;
free(c);
return v;
}
Vizitare
Accesarea/vizitarea elementului de la vrf stivei presupune determinarea valorii acestuia, valoare
care se va reine ntr-o variabil e, fr a o extrage.
Se poate observa c ultimele trei operaii au complexitatea O(1), iar prima operaie
complexitatea O(n).
Utilizarea
n informatic stiva joac un rol fundamental. Pentru a ntelege mecanisme fundamentale ale
programrii (de exemplu, functiile sau recursivitatea) este necesar cunoasterea notiunii de stiv.
Pe scurt, stiva este util n situatii n careeste necesar memorarea unor informatii si regsirea
acestora ntr-o ordinea anumit.
Coada
Coada este o structur de date in care accesarea se face dupa model FIFO (First In First Out).
Inserarea elementelor este posibila doar la sfirsitul coadei, iar extragerea numaai de la inceputul.
Exemplul de implimentarea in C
typedef struct elq{
nod *adrnod;
struct elq *next;
}elq;
Arborii binari nu reprezinta cazuri particulare de arbori orientati, decat daca se face abstractie de
distinctia mentionata intre descendentul drept si cel stang al fiecarui varf. Intr-adevar daca un
varf are un singur descendent, aceasta informatie este suficienta in cazul unui arbore, dar
insuficienta in cazul unui arbore binar, cand trebuie precizat daca acest descendent este
descendent stang sau descendent drept.
Un arbore este compus din elementele numite noduri sau varfuri si legaturile dintre acestea.
Un nod situat pe un anumit nivel este nod tata pentru nodurile legate de el, situate pe nivelul
urmator, acestea reprezentand fiii sai. Fiecare nod are un singur tata, cu exceptia radacinii care
nu are tata. Nodurile fara fii se numesc noduri terminale sau frunze. Termenii ' nod tata', 'fiu' sau
'frate' sunt preluati de la arborii genealogici, cu care arborii se aseamana foarte mult.
Implementarea arborilor binari
typedef struct nod
{
Int info;
struct nod *left;
struct nod *right;
}nod;
A) Arborii binari pot fi parcursi prin metode specifice grafurilor: in adancime, latime.
strupr(gets(nume_recursie)); default:
printf("Error: Acesta
nod *ttt; optiune nu exista !");
ttt = searchSDA(root, getch();
nume_recursie); break;
printf("\nCinematograf }
cautat : \n\n"); }
if (ttt)
{
printf("Denumirea: }
\"%s\"\n", strupr(ttt->name));
printf("Adresa: %s\n", return 0;
strupr(ttt->adress)); }
Introducerea arborelui:
Meniu principal:
Concluzii:
In urma efectuarii laboratorului am facut cunostinta cu notiunele de stiva,
coada , arbore si altele. Am obtinut deprinderi practice de prelucrarea arborilor
binari, crearea cozilor si stivelor. Am invatat cum sa aplic in practica algoritmii
iterativi si recursivi pentru crearea, parcurgerea si prelucrearea arborilor.
Coada este o structura de date foarte necesara in programare. Cu ajutorul ei
putem realiza algorimii sau, de exemplu lista de asteptare pentru diferite lucruri.
Algorimtii recursivi cere de la programator atentie sporita, fiindca daca ati
uitat sa scrieti conditia de iesire din recursia, ea se fa efectua nelimitat.
A doua problema recursiei reisese din prima. Daca resucrisia n-are conditia
de stopare, atunci progrmaul va folosi toate resursele calculatorului, innaine de a
da eroare.
Algorimii recursivi sunt foarte complicate penru intelegerea, daca sinteti
incepetor. Totusi pentru un programist avansat este un instrument foarte puternic.
Bibliografie:
1. Informaii despre Stiv (structura de date)(http://www.cs.utah.edu/~regehr/stacktool/)
[Accesat la 21.05.2017]
2. Informatii despre Cozi (https://xlinux.nist.gov/dads/HTML/queue.html)
[Accesat la 21.05.2017]
3. Conspect la curs Structuri de Date si Algoritmii