예제 #1
0
void eliminarRegistro(Pagina* actual, tipoClave cl, int* encontrado)
{
   int k;

   if (actual != NULL)
   {
      *encontrado = buscarNodo(actual, cl, &k);
      if (*encontrado)
      {
         if (actual->ramas[k-1] == NULL)		/* es un nodo hoja */
            quitar(actual, k);
         else
         {
            sucesor(actual, k);
            /* se elimina la clave sucesora en su nodo */
            eliminarRegistro(actual->ramas[k], actual->claves[k], encontrado);
         }
      }
      else
      {
         eliminarRegistro(actual->ramas[k], cl, encontrado);
      }
      /* Las llamadas recursivas devuelven control a este punto.
         Se comprueba el número de claves del nodo descendiente,
         desde el nodo actual en la ruta de búsqueda seguida.
      */

      if (actual->ramas[k] != NULL)
      if (actual->ramas[k]->cuenta < m/2)
      restablecer(actual,k);
   }
   else
	  *encontrado = 0;
}
예제 #2
0
Pagina* buscar(Pagina* actual, tipoClave cl, int* indice)
{
   if (actual == NULL)
   {
      return NULL;
   }
   else
   {
      int esta;
      esta = buscarNodo(actual,cl,indice);
      if (esta)
         return actual;
      else
         return buscar(actual -> ramas[*indice],cl,indice);
   }
}
예제 #3
0
bool MainWindow::eventFilter(QObject *object, QEvent *event)
{
    if (object == ui->insNum && event->type() == QEvent::KeyPress){
        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
        if (keyEvent->key() == Qt::Key_Return){
            addNode();
            return true;
        }
        else{
            return QMainWindow::eventFilter(object, event);
        }
    }
    else if (object == ui->borrarNum && event->type() == QEvent::KeyPress){
        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
        if (keyEvent->key() == Qt::Key_Return){
            deleteNode();
            return true;
        }
        else{
            return QMainWindow::eventFilter(object, event);
        }
    }
    else if (object == ui->buscNum && event->type() == QEvent::KeyPress){
        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
        if (keyEvent->key() == Qt::Key_Return){
            buscarNodo();
            return true;
        }
        else{
            return QMainWindow::eventFilter(object, event);
        }
    }
    else if (object == ui->boxArchivo && event->type() == QEvent::KeyPress){
        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
        if (keyEvent->key() == Qt::Key_Return){
            leerArchivo();
            return true;
        }
        else{
            return QMainWindow::eventFilter(object, event);
        }
    }
    else{
        return QMainWindow::eventFilter(object, event);
    }
}
예제 #4
0
	/*
	 * Función que borra un nodo y libera la memoria.
	 */
	lista* borrar(int id){
		lista* temporal = head;
		if(buscar(id) == true){
			while(temporal != NULL){
				if(temporal-> identificador == id && temporal->cantidad > 1){
					temporal->cantidad -= 1;
					return head;
				}
				temporal = temporal->siguiente;
			}
			lista* borrando = buscarNodo(id);
			lista* previo = buscarAnterior(id);
			previo->siguiente = borrando->siguiente;
			borrando->siguiente = NULL;
			free(borrando);
			borrando = NULL;
			return head;
		}
		else{
			return head;
		}
	}
예제 #5
0
void empujar(Pagina* actual, tipoClave cl, int* subeArriba, tipoClave* mediana, Pagina** nuevo)
{
   int k;

   if (actual == NULL)
   {
      *subeArriba = 1;
      *mediana = cl;
      *nuevo = NULL;
   }
   else
   {
      int esta;
      esta = buscarNodo(actual,cl,&k);

      if (esta)
      {
         puts("\nClave duplicada");
         *subeArriba = 0;
         return;
      }

      empujar(actual->ramas[k], cl, subeArriba, mediana, nuevo);

      /* devuelve control; vuelve por el camino de búsqueda */

      if (*subeArriba)
      {
         if (nodoLLeno(actual))
            dividirNodo(actual, *mediana, *nuevo, k, mediana, nuevo);
         else
         {
            *subeArriba = 0;
            meterHoja(actual, *mediana, *nuevo, k);
         }
      }
   }
}
예제 #6
0
void MainWindow::on_buscar_released()
{
    buscarNodo();
}