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; }
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); } }
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); } }
/* * 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; } }
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); } } } }
void MainWindow::on_buscar_released() { buscarNodo(); }