struct Bicicleta{
int idBicicleta;
int durataUtilizare;
int idStatie;
int nrUtilizari;
char* numeUtilizator;
};
struct nodArb{
Bicicleta bicicleta;
nodArb *left, *right;
};
nodArb *creeareNod(Bicicleta bic, nodArb* s, nodArb* d){
nodArb* nou = (nodArb*)malloc(sizeof(nodArb));
nou->bicicleta.idBicicleta = bic.idBicicleta;
nou->bicicleta.durataUtilizare = bic.durataUtilizare;
nou->bicicleta.idStatie = bic.idStatie;
nou->bicicleta.nrUtilizari = bic.nrUtilizari;
nou->bicicleta.numeUtilizator = (char*)malloc(strlen(bic.numeUtilizator) + 1);
strcpy(nou->bicicleta.numeUtilizator, bic.numeUtilizator);
nou->left = s;
nou->right = d;
return nou;
}
nodArb* inserare(Bicicleta bic, nodArb* root){
nodArb* aux = root;
if (root == NULL){
aux = creeareNod(bic, NULL, NULL);
return aux;
}
else
while (true){
if (bic.durataUtilizare < aux->bicicleta.durataUtilizare){
if (aux->left != NULL) aux = aux->left;
else{
aux->left = creeareNod(bic, NULL, NULL);
return root;
}
}
else{
if (bic.durataUtilizare>aux->bicicleta.durataUtilizare){
if (aux->right != NULL) aux = aux->right;
else{
aux->right = creeareNod(bic, NULL, NULL);
return root;
}
}
else{
printf("\nNod existent!");
return root;
}
}
}
}
void inordine(nodArb *root){
if (root != NULL){
inordine(root->left);
printf("\nID Bic:%d , Nume utilizator:%s , Durata Util:%d\n", root->bicicleta.idBicicleta, root->bicicleta.numeUtilizator,root->bicicleta.durataUtilizare);
inordine(root->right);
}
}
void postordine(nodArb* root){
if (root != NULL){
printf("\nID Bic:%d , Nume utilizator:%s , Durata Util:%d\n", root->bicicleta.idBicicleta, root->bicicleta.numeUtilizator, root->bicicleta.durataUtilizare);
postordine(root->left);
postordine(root->right);
}
int maxim(int a, int b)
{
int max = a;
if (max<b) max = b;
return max;
}
int nr_niveluri(nodarb *rad)
{
if (rad!=NULL)
return 1+maxim(nr_niveluri(rad->left),
nr_niveluri(rad->right));
else return 0;
}
void calcul_BF(nodarb *rad)
{
if(rad!=NULL)
{
rad->BF = nr_niveluri(rad->right)-nr_niveluri(rad->left);
calcul_BF(rad->left);
calcul_BF(rad->right);
}
}
nodarb* rotatie_dreapta(nodarb* rad)
{
printf("\nRotatie dreapta!");
nodarb* nod1 = rad->left;
rad->left = nod1->right;
nod1->right = rad;
rad = nod1;
return rad;
}
nodarb* rotatie_stanga(nodarb* rad)
{
printf("\nRotatie stanga!");
nodarb *nod1 = rad->right;
rad->right = nod1->left;
nod1->left = rad;
rad = nod1;
return rad;
}
nodarb* rotatie_stanga_dreapta(nodarb* rad)
{
printf("\nRotatie stanga dreapta!");
nodarb* nod1 = rad->left;
nodarb* nod2 = nod1->right;
nod1->right = nod2->left;
nod2->left = nod1;
rad->left = nod2->right;
nod2->right = rad;
rad = nod2;
return rad;
}
nodarb* rotatie_dreapta_stanga(nodarb* rad)
{
printf("\nRotatie dreapta stanga!");
nodarb* nod1 = rad->right;
nodarb* nod2 = nod1->left;
nod1->left = nod2->right;
nod2->right = nod1;
rad->right = nod2->left;
nod2->left = rad;
rad = nod2;
return rad;
}
//dupa citire si inserare
calcul_BF(rad);
if((rad->BF==-2)&&(rad->left->BF==-1))
{
rad = rotatie_dreapta(rad);
calcul_BF(rad);
}
else if((rad->BF==2)&&(rad->right->BF==1))
{
rad = rotatie_stanga(rad);
calcul_BF(rad);
}
else if((rad->BF==-2)&&(rad->left->BF==1))
{
rad = rotatie_stanga_dreapta(rad);
calcul_BF(rad);
}
else if((rad->BF==2)&&(rad->right->BF==-1))
{
rad = rotatie_dreapta_stanga(rad);
calcul_BF(rad);
}
void main(){
nodArb* root = NULL;
Bicicleta b;
FILE* f = fopen("Text.txt", "r");
if (f){
while (!feof(f)){
int idB=0;
int durata=0;
int idS=0;
int nrUtil=0;
char nume[50]="";
//b = (Bicicleta*)malloc(sizeof(Bicicleta));
fscanf(f, "%d", &idB);
fscanf(f, "%d", &durata);
fscanf(f, "%d", &idS);
fscanf(f, "%d", &nrUtil);
fscanf(f, "\n");
fscanf(f, "%[^\n]", nume);
b.numeUtilizator = (char*)malloc(strlen(nume) + 1);
b.idBicicleta = idB;
b.durataUtilizare = durata;
b.idStatie = idS;
b.nrUtilizari = nrUtil;
strcpy(b.numeUtilizator, nume);
root=inserare(b, root);
}
}
fclose(f);
----------------------------HASH-------------------------------------
#include<malloc.h>
#include<iostream>
struct Reteta{
unsigned int nrReteta;
int nrMedicamentePrescrise;
char** listaMedicamente;
char* numeMedic;
float valoareBruta;
int procentCompensare;
};
struct nodls{
Reteta reteta;
nodls* next;
};
struct HashMedic{
nodls** v;
int dimensiune;
};
int functie_hash(int cheie, HashMedic tabela){
return cheie%tabela.dimensiune;
}
int inserare(HashMedic tabela, Reteta r){
int poz;
if (tabela.v != NULL){
poz = functie_hash(r.nrReteta, tabela);
nodls* nou = (nodls*)malloc(sizeof(nodls));
nou->reteta.nrMedicamentePrescrise = r.nrMedicamentePrescrise;
nou->reteta.procentCompensare = r.procentCompensare;
nou->reteta.valoareBruta = r.valoareBruta;
nou->reteta.nrReteta = r.nrReteta;
nou->reteta.numeMedic = (char*)malloc(strlen(r.numeMedic) + 1);
strcpy(nou->reteta.numeMedic, r.numeMedic);
nou->reteta.listaMedicamente = (char**)malloc((r.nrMedicamentePrescrise + 1)*sizeof(char*));
for (int i = 0; i < r.nrMedicamentePrescrise; i++){
nou->reteta.listaMedicamente[i] = (char*)malloc(strlen(r.listaMedicamente[i]) + 1);
strcpy(nou->reteta.listaMedicamente[i], r.listaMedicamente[i]);
}
nou->next = NULL;
if (tabela.v[poz] == NULL){
tabela.v[poz] = nou;
}
else{//coliziune
nodls* temp = tabela.v[poz];
while (temp->next != NULL) temp = temp->next;
temp->next = nou;
}
}
return poz;
}
void traversare(HashMedic tabela){
if (tabela.v != NULL){
for (int i = 0; i < tabela.dimensiune; i++){
if (tabela.v[i] != NULL){
nodls* temp = tabela.v[i];
while (temp != NULL){
printf("Nr reteta:%d, Nr med:%d, Nume Medic:%s Valoare:%fRON\n", temp->reteta.nrReteta, temp->reteta.nrMedicamentePrescrise, temp->reteta.numeMedic, temp->reteta.valoareBruta);
printf("Lista medicamente: ");
for (int i = 0; i < temp->reteta.nrMedicamentePrescrise; i++){
printf(" %s , ", temp->reteta.listaMedicamente[i]);
}
printf("\n");
temp = temp->next;
}
}
}
}
}
void main(){
HashMedic tabela;
tabela.dimensiune = 101;
tabela.v = (nodls**)malloc(tabela.dimensiune*sizeof(nodls*));
for (int i = 0; i < tabela.dimensiune; i++)
tabela.v[i] = NULL;
FILE* f = fopen("Text.txt", "r");
Reteta r;
if (f){
while (!feof(f)){
fscanf(f, "%d", &r.nrReteta);
fscanf(f, "%d", &r.nrMedicamentePrescrise);
char buffer[50];
r.listaMedicamente = (char**)malloc(r.nrMedicamentePrescrise*sizeof(char*));
for (int i = 0; i < r.nrMedicamentePrescrise; i++){
fscanf(f, "\n");
fscanf(f, "%[^\n]", buffer);
r.listaMedicamente[i] = (char*)malloc(strlen(buffer) + 1);
strcpy(r.listaMedicamente[i], buffer);
}
fscanf(f, "\n");
fscanf(f, "%[^\n]", buffer);
r.numeMedic = (char*)malloc(strlen(buffer) + 1);
strcpy(r.numeMedic, buffer);
fscanf(f, "%f", &r.valoareBruta);
fscanf(f, "%d", &r.procentCompensare);
inserare(tabela, r);
}
}
traversare(tabela);
}