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;

}