next up previous
Next: La función search_root Up: Inserción Previous: La función divide

La función concect

Esta función liga las dos nuevas hojas para el recorrido secuencial. Esta función, a su vez, se hace un llamado dos funciones:index_node y conectnode.

La función index_node tiene 2 parámetros de entrada: p (nodo padre) y h (nodo hijo). Y tiene la tarea de regresar el índice de h en el arreglo correspondiente del arreglo nodos hijos de p. Esto es, determina si h es hijo de p y cual es el valor del índice. Si este valor es negativo, entonces h no es hijo directo de p.

/* Regresa el indice de un nodo relativo a su padre */
/* [SEPTIEMBRE-1997]                                */
/* AMILCAR MENESES VIVEROS                          */
int index_node(node *p, node *h)
{
  int i; 
  for( i = p->nKeys; i>=0; i--) 
     if ( (p->an[i])==h ) return i;
  return -1;
}

La función conectnode se encarga de establecer las ligas entre los dos nodos que tiene como parámetros de entrada.

 
/* Conecta secuencialmente 2 nodos  */ 
/* [ABRIL-97]                       */ 
/* AMILCAR MENESES VIVEROS          */ 
void conectnode(node *n1, node *n2)
{
    node *pnext; 
    pnext = n1->nxt; 
    n1->nxt = n2; 
    n2->nxt = pnext; 
}

La rutina conecta se encarga de establecer el orden secuencial de los nodos, dependiendo del valor que regrese index_node. Esto es, determina que nodo se conectará al final del primer nodo.

/* Conecta la hoja nd1 y nd2 en forma secuencial */
/* [ABRIL-97]					 */
/* AMILCAR MENESES VIVEROS      		 */
void concect(node *nd1, node *nd2) 
{
    node *ndup;
    int i1, i2; 

    ndup = nd1->up; 
    if ( (i1 = index_node(ndup, nd1)) < 0 ) {
        puts("Error en coneccion!!"); exit(1); 
    }
    if ( (i2 = index_node(ndup, nd2)) < 0 ) {
        puts("Error en coneccion!!"); exit(1); 
    }
 
    if (i1 < i2)      conectnode(nd1, nd2);
    else if (i1 > i2) conectnode(nd2, nd1); 
    else { puts("Traslape de nodos!!!"); exit(1); }
}



Amilcar Meneses
2003-09-08