Documente Academic
Documente Profesional
Documente Cultură
LLin - implementare:
cu tablouri; cu liste simplu nlnuite.
Recursivitate. Exemple
Algoritmi i programare
Elt[MAX]
e0
0
Algoritmi i programare
Fiierul elt.h
#ifndef _ELT_H #define _ELT_H typedef int Elt; #endif
Algoritmi i programare
Fiierul llin.h
#include "elt.h" #define #define #define #define MAX_LLIN 1000 SUCCES 0 ERR_LLIN_MEM_INSUF 1 ERR_LLIN_INDEX_GRESIT 2
Fiierul llin.cpp
#include llin.h int listaVida(LLin *l){ /* aloca memorie pentru tablou */ l->tab = new Elt[MAX_LLIN]; if (l->tab == NULL) return ERR_LLIN_MEM_INSUF; /* initializeaza numarul de elemente */ l->nrElt = 0;
Fiierul llin.cpp
int insereaza( LLin *l, Elt elt, int k ) { int j;
Fiierul llin.cpp
/* pune pe pozitia k noul element */ l->tab[k] = elt;
Algoritmi i programare
Fiierul llin.cpp
void parcurge(LLin *l, void viziteaza(Elt)) { int i; for (i = 0; i < l->nrElt; i++) viziteaza(l->tab[i]); }
Algoritmi i programare
Fiierul llin-demo.cpp
#include <iostream> #include "llin.h"
Algoritmi i programare
Fiierul llin-demo.cpp
void main(){ // declaratii... LLin lista; listaVida(&lista); for (i=1; i<8; i++){ e = i; if (coderr = insereaza(&lista, e, i-1)) cout << \nERR LLIN: << coderr << \n; parcurge(&lista, afiseazaInt);
}
Algoritmi i programare 10
e1
en-1
Algoritmi i programare
11
/* aloca spatiu pentru noul nod */ q = new NodLlin; if (q == NULL) return ERR_LLIN_MEM_INSUF; /* memoreaza noua informatie */ q->elt = elt;
Algoritmi i programare 13
Apelul recursiv:
fact(4)
fact(3)
fact(2)
fact(1)
1
19
Algoritmi i programare
Algoritmi i programare
20
Valoarea returnata de factorial(n) este corecta doar pentru valorile lui n pentru care n! <= INT_MAX
Algoritmi i programare 21
Algoritmi i programare
23
fib(3)
fib(2)
fib(2)
fib(1)
fib(2)
fib(1)
fib(1)
fib(0)
fib(1)
fib(0)
fib(1)
fib(0)
Algoritmi i programare
24
Numr de apeluri
n fib(n) apeluri
2 24 42 43
Algoritmi i programare
Algoritmi i programare
27