Sunteți pe pagina 1din 5

MATERIE examen SDA

1)
a)Sa se construiasca un arbore AVL(de cautare) pe baza vectorului y=-18,29,12,21,24,26,22,5,14,-29,-1,-23.
Definiti elementul vectorului. -3pct
typedef struct nodAVL{
int informatie;
int echilibru;
nodAVL *ss, *sd;
} NODAVL, *PNODAVL;
b)Scrieti codul functiilor care realizeaza rotire simpla/dubla la dreapta/stanga. 3-pct
PNODAVL sRotireStanga(PNODAVL rad){
PNODAVL temp;
temp = rad->sd;
rad->sd = temp->ss;
temp->ss = rad;
calculEchilibru(rad);
calculEchilibru(temp);
rad = temp;
return rad;
}

PNODAVL sRotireDreapta(PNODAVL rad){


PNODAVL temp;
temp = rad->ss;
rad->ss = temp->sd;
temp->sd = rad;
calculEchilibru(rad);
calculEchilibru(temp);
rad = temp;
return rad;
}

PNODAVL dRotireStanga(PNODAVL rad){


rad->sd = sRotireDreapta(rad->sd);
rad = sRotireStanga(rad);
return rad;
}

PNODAVL dRotireDreapta(PNODAVL rad){


rad->ss = sRotireStanga(rad->ss);
rad = sRotireDreapta(rad);
return rad;
}

c)Codul functiei care sterge/afiseaza arborele.(exemplificare pe vectorul y) 4-pct


2)
a)Sa se defineasca dinamic un graf(se defineste varful si arcul grafului).Desenati graful descris de matricea adiacenta
A,sub forma unei structure dinamice. 3-pct

typedef struct varf{


info informatie;
varf *varfUrmator;
struct arc *capListaArce;
} VARF, *PVARF;

typedef struct arc{


PVARF varfDestinatie;
int pondereLegatura;
arc *arculUrmator;
} ARC, *PARC;

b)Sa se scrie codul functiei care extrage/introduce un varf dintr-o stiva/coada de varfuri.Definiti coada/stiva. 3-pct

typedef struct{ typedef struct stiva{


PLISTA inceput; PVARF varf;
PLISTA sfarsit; stiva *urmatorulDinStiva;
} COADA; } STIVA, *PSTIVA;

COADA introduceCoada(COADA coada, PVARF varf){


PLISTA nou = new LISTA; PSTIVA push(PSTIVA varfStiva, PVARF varf){
nou->varf= varf; PSTIVA temp = new STIVA;
nou->urmatorulDinCoada = NULL; if(temp){
if(!coada.inceput) temp->urmatorulDinStiva = varfStiva;
coada.sfarsit = coada.inceput = nou; temp->varf = varf;
else{ }
coada.sfarsit->urmatorulDinCoada = nou; return temp;
coada.sfarsit = nou; }
}
return coada;
PSTIVA pop(PSTIVA varfStiva, PVARF *pPVarf){
}
if(!varfStiva) return NULL;
COADA extrageCoada(COADA coada, PVARF *pPVarf){
PSTIVA varfSters;
if(!coada.inceput) return coada;
*pPVarf = coada.inceput->varf; varfSters = varfStiva;
PLISTA temp;
temp = coada.inceput; varfStiva = varfStiva->urmatorulDinStiva;
coada.inceput = coada.inceput->urmatorulDinCoada; *pPVarf = varfSters->varf;
delete temp;
if(!coada.inceput) coada.sfarsit = NULL; delete varfSters;
return coada; return varfStiva;
}
}

c)Sa se scrie codul functiei care realizeaza parcurgerea grafului in adancime/latime iterativ. Exemplificati functionarea
codului daca parcurgerea porneste din varful 4. 4-pct(3-pct functia+1pct exemplificare) pag 78-86
3)
a)Sa se scrie codul functiei care realizeaza sortarea in ordine crescatoare/descrescatoare prin
QuickSort/MergeSort+interclasare. 6-pct pag 112-124
QUICKSORT: void QuickSort(int inceput, int sfarsit){
if (inceput>=sfarsit)
{
return;
}

int i= inceput,j=sfarsit, pivot, temp;


pivot=v[(inceput+sfarsit)/2];
do{
while(v[i]<pivot) i++; //>
while(v[j]>pivot) j--; //<
if(i<=j){
temp=v[i];
v[i]=v[j];
v[j]=temp;
i++;
j--;
}
}while(i<=j);
QuickSort(inceput,j);
QuickSort(i,sfarsit);
}

MERGESORT:
Void interclasare(int inceput1,int sfarsit1,int inceput2,int sfarsit2);
void mergeSort(int inceput,int sfarsit){
if(inceput>=sfarsit)return;
int mijloc=(inceput+sfarsit)/2;
mergeSort(inceput,mijloc);
mergeSort(mijloc+1,sfarsit);
interclasare(inceput,mijloc,mijloc+1,sfarsit)
}
void interclasare(int inceput1,int sfarsit1,
int inceput2,int sfarsit2){
int vTemp[N],dim_vTemp, i=inceput1,j=inceput2,k=0;
dim_vTemp=sfarsit1-inceput1+1+sfarsit2-inceput2+1;
while(i<=sfarsit1)&&(j<=sfarsit2){
if(V[i]<v[j]{
vTemp[k]=v[i];
i++;
}
else{
vTemp[k]=v[i];
j++
}
k++;
}
while(i<=sfarsit1){
vTemp[k]=v[i];
i++;
k++;
}
while(j<=sfarsit2){
vTemp[k]=v[j];
j++;
k++;}
for(k=0;k<=sfarsit1-inceput1;k++) v[inceput1+k]=vTemp[k];
for(k=sfarsit1-inceput1+1;k<=(sfarsit1-inceput1+1)+(sfarsit2-inceput2);k++)
v[inceput2+(k-sfarsit1+inceput1-1)]=vTemp[k];}
b)Sa se explice functionarea codului pentru vectorul y. 4-pct
4) i)
a)Sa se scrie codul functiilor care realizeaza generarea aranjamentelor/combinarilor/ permutari/ 6-pct
Aranjamente Combinari Permutari
int st[20]; int st[20];
int n; int p; int st[20];
int valid (int k) int valid (int k) int valid (int k)
{int i; {int i; {int i;
for (i=1;i<k;i++) for (i=1;i<k;i++) for (i=1;i<k;i++)
if (st[k]==st[i]) if(st[k]<=st[i]) if (st[k]==st[i])
return 0; return 0; return 0;
return 1;} return 1;} return 1;}
void afisare (int k) void afisare (int k) void afisare (int k)
{int i; {int i; {int i;
for (i=1;i<k;i++) for (i=1;i<k;i++) for (i=1;i<k;i++)
cout<<st[i]; cout<<st[i]; cout<<st[i];
cout<<" ";} cout<<" ";} cout<<" ";}

int main() { cout<<n=;cin>>n; int main() { cout<<p=;cin>>p; int main()


{ {
int k=1; int k=1; int k=1;
st[k]=0; st[k]=0; st[k]=0;
while(k>0) while(k>0) while(k>0)
if (k==p+1) if (k==p+1) if (k==n+1)
{afisare(k); {afisare(k); {afisare(k);
k--;} k--;} k--;}
else else else
if (st[k]<n) if (st[k]<n-p+k) if (st[k]<n)
{st[k]++; {st[k]++; {st[k]++;
if (valid(k)) if (valid(k)) if (valid(k))
{k++; {k++; {k++;
st[k]=0;} st[k]=0;} st[k]=0;}
} } }
else else else
k--; } k--; k--;
} } }
b)exemplificati functionarea codului -4 pct
4) ii)
a)Sa se scrie codul functiilor pentru problema damelor/hartilor/steagurilor 6-pct
DAME: HARTI: Steaguri:
#include<iostream> #include<iostream> #include<iostream>
Using namespace std; using namespace std; using namespace std;
int st[20], nr=0 , n; int n,i,j,sol[10],a[10][10]; int n,st[20];
int valid (int k) int valid (int k){ int valid (int k)
{int i; int i; {int i;
for (i=1;i<k;i++) for(i=1;i<k;i++) for(i=1;i<k;i++)
{if (st[k]==st[i]) if (sol[k]==sol[i]&&a[i][k]==1) if ((k!=1) && (st[k-1]==st[k]))
return 0; return 0; return 0;
if (abs(k-i)==abs(st[k]-st[i])) return 1;} return 1;}
return 0;} void back(int k) void afisare (int k)
return 1;} { {int i;
void afisare (int n) int i; for (i=1;i<k;i++)
{int i, j; if (k==n+1){
if(st[i]==1) cout<<rosu;
nr++; for(i=1;i<=k;i++)
cout<<endl; else if(st[i]==2) cout<<gri;
cout<<"Solutia "<<nr<<endl; } else if(st[i]==3) cout<<verde;
for (i=1;i<=n;i++) else else if(st[i]==4) cout<<alb;
{for (j=1;j<=n;j++) for(i=1;i<=4;i++){
sol[k]=i; cout<<endl;
if (st[i]==j) }
if(valid(k))
cout<<'*'; back(k+1); int main()
else }
{int k=1;
cout<<' '; }
int main() { cout<<n=;
cout<<endl;} cin<<n;
cout<<endl; cout <<numarul de tari:;
cin >>n; st[k]=0;
} while(k>0)
void dame (int n) for(i=1;i<=n;i++)
for(j=1;j<=i-1;j++) if (k==4)
{int k=1; {afisare(k);
st[k]=0; {
cout<<a[<<i<<,<<j<<]=; k--;}
while(k>0) else
if (k==n+1) cin>>a[i][j];
a[j][i]=a[i][j]; if (st[k]<n)
{afisare(n); {st[k]++;
k--;} }
back(i); if (valid(k))
else {k++;
if (st[k]<n) systemPAUSE;
return 0; st[k]=0;}
{st[k]++; }
if (valid(k)) }
else
{k++; k--;
st[k]=0;} system PAUSE;
} return 0;
else }
k--;
system PAUSE;
return 0;
}

b)exemplificati functionarea codului -4 pct

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