next up previous
Next: Inserción Up: Implantación de un B Previous: Recorrido Secuencial

Eliminación

La eliminación en un B+ se realiza únicamente a nivel de nodo hoja, si la llave que se desea eliminar está en una rama, se conserva y se sigue hasta encontrar la llave y su respectivo registro en una hoja, esta operación se realiza con la función search_leaf explicada anteriormente. Una vez localizado el elemento (nodo hoja y posición) se llama a la rutina erase_register que libera la parte de memoria direccionada por el apuntador del arreglo de registros y recorre (o compacta) los elementos que se encuentran a la derecha del registro eliminado y decrementa el número de llaves en la hoja.
 
/* Borra el elemento "pos" de la hoja n */
/* [MAYO-97]				*/
/* AMILCAR MENESES VIVEROS		*/
void erase_register(node *n, int pos)
{
   int i; 

   free(n->ap[pos]); 
   for (i=pos; i< n->nKeys; i++) { 
       n->ap[i] = n->ap[i+1];  
       n->ak[i] = n->ak[i+1]; 
   }

   n->ap[i] = NULL; 
   n->ak[i] = BKeyNull;
   (n->nKeys)--;
}


Amilcar Meneses
2003-09-08