Advertisement
Guest User

Localizar RAC

a guest
Nov 22nd, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.50 KB | None | 0 0
  1. int localizar_RAC(int dni){                             ///Inicio Localizar Rebalse Abierto Cuadrático (DOC 0 INDICA CELDA LIBRE, DOC -1 INDICA CELDA VIRGEN)
  2.     libre=-1;
  3.     cost_aux=0;
  4.     int i=hashing(dni,MPC);
  5.     int j=1;
  6.     if(cant_RAC==0){
  7.         if(flag_evocar==1){
  8.             RAC_loc_cant_f++;
  9.         }
  10.         pos_RAC=i;
  11.         return -1;
  12.     }
  13.     while(j<=MPC && RAC[i].doc!=dni && RAC[i].doc!=-1){
  14.         if (RAC[i].doc==0){
  15.             if(libre==-1){
  16.                 libre=i;
  17.             }
  18.         }
  19.         if(flag_evocar==1){
  20.             cost_aux++;
  21.         }
  22.         i=(i+j)%MPC;
  23.         j++;
  24.     }
  25.     if(RAC[i].doc==dni){
  26.         if(flag_evocar==1){
  27.             cost_aux++;                          ///Consulto la celda para saber si es igual, como es igual no entra en el while y por lo tanto no incremento el costo
  28.             if(cost_aux>RAC_loc_MAX_e){
  29.                 RAC_loc_MAX_e=cost_aux;
  30.             }
  31.             RAC_loc_total_e+=cost_aux;
  32.             RAC_loc_cant_e++;
  33.         }
  34.         pos_RAC=i;
  35.         return 1;
  36.     }
  37.     else{
  38.         if(RAC[i].doc==-1){
  39.             if(libre!=-1){
  40.                 pos_RAC=libre;
  41.                 if(flag_evocar==1){
  42.                 cost_aux++;                         ///Consulta la celda en el while y, como es celda virgen, no entra. Por lo tanto se incrementa aquí.
  43.                 RAC_loc_total_f+=cost_aux;
  44.                 if(cost_aux>RAC_loc_MAX_f){
  45.                     RAC_loc_MAX_f=cost_aux;
  46.                 }
  47.                 RAC_loc_cant_f++;
  48.                 }
  49.             }
  50.             else{
  51.                 if(flag_evocar==1){
  52.                     cost_aux++;                     ///Consulta la celda en el while y, como es celda virgen, no entra. Por lo tanto se incrementa aquí.
  53.                     RAC_loc_total_f+=cost_aux;
  54.                     if(cost_aux>RAC_loc_MAX_f){
  55.                         RAC_loc_MAX_f=cost_aux;
  56.                     }
  57.                     RAC_loc_cant_f++;
  58.                 }
  59.                 pos_RAC=i;
  60.             }
  61.             return 0;
  62.         }
  63.         if(j>MPC){
  64.             if(flag_evocar==1){
  65.                 RAC_loc_total_f+=cost_aux;
  66.                 if(cost_aux>RAC_loc_MAX_f){
  67.                     RAC_loc_MAX_f=cost_aux;
  68.                 }
  69.                 RAC_loc_cant_f++;
  70.             }
  71.             if(libre!=-1){
  72.                 pos_RAC=libre;
  73.             }
  74.             else{
  75.                 pos_RAC=i;
  76.             }
  77.             return 0;
  78.         }
  79.     }
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement