questa è una funzione dove si effettuano 4 ricerche su 3 liste differenti.ogni chiamata a funzione comprende una ricerca..Mi son incasinato col calcolo del costo perke' nn riesco a capire se è lineare o quadratico..
codice:
int ordina(char *s1,char *s2)
{
rel1 *r1=inizioRel1;
rel2 *r2=inizioRel2;
rel3 *r3=inizioRel3;
rel1 *tmp=NULL;
rel1 *tmp1=NULL;
rel2 *tmp3=NULL;
rel1 *temp=NULL;
int flag=0; //controllore. Se la prima regola non esiste sara' posto a zero altrimenti a 1
int cont=0,cont1=0;
char str[MAXSTRING];
char str1[MAXSTRING];
char str2[MAXSTRING];
strcpy(s1,s1);
strcpy(s2,s2);
cont=contD;
cont1=contB;
if(strcmp(s1,s2)==0) //se inserisco due specie uguali esco
return 0;
else
if(r1!=NULL) //se la lista delle regole di base non è vuota inserisco in coda la nuova regola
{
flag=1; //pongo a 1 il flag per dire la lista delle regole di base non è vuota
tmp=insertRelBase(s1,s2);
if(tmp==0) //se il valore di ritorno è 0, vuol dire che la regola inserita era errata
return 1;
else
if(controlloRegole(r1,s1,s2)==0) //controllo se l'introduzione della nuova regola produce un ciclo o delle regole derivate corrette
{
printf("\n-1\n");
cancellaCiclo(tmp); //se si verifica un ciclo cancello l'ultima regola inserita che lo ha provocato
return 1;
}
}
if(0==flag) //se flag è uguale a 0, vuol dire che la lista delle regole di base era vuota
{
insertRelBase(s1,s2); //inserisco la nuova regola
insertRegole(); //la aggiungo alla lista delle regole generali
return 1;
}
else //se la lista contiene già altre regole
{
cont=contD;
insertRegole(); //unisco la lista delle regole di base e quella delle derivate nella liste delle regole generali
contrRegoleGenerale(r3); //controlle se a loro volta creano delle regole derivate
}
return 1;
}