public void InsercionEnArbolB(Registro registro, string nombreArchivo) { pag_n = new TPagina(); TPagina aux = new TPagina(); WriteFile wf = new WriteFile(nombreArchivo); bool b; if (raiz == null) { raiz = CreaPagina(d, H); raiz.SetClaves(clave, 0); raiz.M += 1; raiz.DireccionNodo = 8; wf.EscribeCabecera(raiz.DireccionNodo); wf.InsertaNodo(raiz); wf.InsertaRegistro(registro); raiz.SetDireccion(registro.Direccion, 0); wf.ModificaNodo(raiz); } else { b = Baja(raiz, registro, nombreArchivo); if (b) { aux = CreaPagina(d, R); raiz.Tipo = pag_n.Tipo; aux.SetPtrs(raiz, 0); aux.SetDireccion(raiz.DireccionNodo, 0); aux.SetClaves(clave, 0); aux.SetPtrs(pag_n, 1); if (pag_n.Tipo != H) { wf.InsertaNodoIR(pag_n); wf.ModificaNodoIR(raiz); } else { wf.InsertaNodo(pag_n); wf.ModificaNodo(raiz); } aux.SetDireccion(pag_n.DireccionNodo, 1); aux.M++; raiz = aux; wf.InsertaNodoIR(raiz); wf.EscribeCabecera(raiz.DireccionNodo); } } }
private void buttonAgregar_Click(object sender, EventArgs e) { if (ChecaCampos()) { WriteFile wf = new WriteFile(nombArchivo); //crear registro CrearRegistro(); if (!File.Exists(nombArchivo)) { archivoCargado = true; wf.CreaArchivo(); DeshabilitaMenu(); } else if (!archivoCargado) { MessageBox.Show ( "El Archivo Ya Existe !!!", "Danger", MessageBoxButtons.OK, MessageBoxIcon.Exclamation ); } if (archivoCargado) { //insertar en arbol arboles.Clave = registro.ClaveBusqueda; arboles.InsercionEnArbolB(registro, nombArchivo); numRegistros = arboles.Count += 1; //leer archivo // insertar en tabla AgregarDatos(); LimpiaTablaArbol(); Carga(); TPagina aux = arboles.Raiz; AgregaArbol(aux, 0); } } else { MessageBox.Show ( "Campos Vacios", "Danger", MessageBoxButtons.OK, MessageBoxIcon.Exclamation ); } }
public void EliminaEnArbolB(string nombreArchivo) { pag_n = new TPagina(); TPagina aux = new TPagina(); WriteFile wf = new WriteFile(nombreArchivo); bool b; if (raiz != null) { b = BajaE(raiz, nombreArchivo); if (b && raiz.Tipo != H) { raiz = pag_n; wf.ModificaNodoIR(raiz);//if else wf.EscribeCabecera(raiz.DireccionNodo); } else if (b) { wf.ModificaNodo(raiz);//q } } }
private bool BajaE(TPagina nodo, string nombreArchivo) { bool b = false; WriteFile wf = new WriteFile(nombreArchivo); int pos; if (nodo.Tipo == H) { //buscar clave tomar direccion y modificar archivo // wf.EliminaRegistro(nodo.GetDireccion(Buscar(nodo, clave) - 1), nodo.GetDireccion(Buscar(nodo, clave))); EliminaClave(nodo, clave); if (nodo.M < d) { b = true; } else { wf.ModificaNodo(nodo); } } else { pos = Buscar(nodo, clave); b = BajaE(nodo.GetPtrs(pos), nombreArchivo); if (b) { if (pos - 1 >= 0) { if (nodo.GetPtrs(pos - 1).M > d /*&& nodo.GetPtrs(pos-1).Tipo == H*/) { PrestaClave(nodo.GetPtrs(pos), nodo.GetPtrs(pos - 1), nodo.GetClave(pos - 1)); nodo.SetClaves(clave, pos - 1); // wf.ModificaNodoIR(nodo); if (nodo.GetPtrs(pos).Tipo != H) { wf.ModificaNodoIR(nodo.GetPtrs(pos)); wf.ModificaNodoIR(nodo.GetPtrs(pos - 1)); } else { wf.ModificaNodo(nodo.GetPtrs(pos)); wf.ModificaNodo(nodo.GetPtrs(pos - 1)); } } else { Fusiona(nodo.GetPtrs(pos), nodo.GetPtrs(pos - 1), nodo.GetClave(pos - 1)); //modifica clave // clave = (pos == 0) ? 0 : pos - 1; clave = nodo.GetClave(pos - 1); EliminaClave(nodo, clave); //wf.ModificaNodoIR(nodo); if (pag_n.Tipo != H) { wf.ModificaNodoIR(pag_n); } else { wf.ModificaNodo(pag_n); } //agregar ptr y clave eliminada } } else { if (nodo.GetPtrs(pos + 1).M > d /*&& nodo.GetPtrs(pos).Tipo == H*/) { PrestaClave(nodo.GetPtrs(pos), nodo.GetPtrs(pos + 1), nodo.GetClave(pos)); nodo.SetClaves(clave, pos); // wf.ModificaNodoIR(nodo); if (nodo.GetPtrs(pos).Tipo != H) { wf.ModificaNodoIR(nodo.GetPtrs(pos)); wf.ModificaNodoIR(nodo.GetPtrs(pos + 1)); } else { wf.ModificaNodo(nodo.GetPtrs(pos)); wf.ModificaNodo(nodo.GetPtrs(pos + 1)); } } else { Fusiona(nodo.GetPtrs(pos), nodo.GetPtrs(pos + 1), nodo.GetClave(pos)); //modifica clave // clave = (pos == 0) ? 0 : pos - 1; clave = nodo.GetClave(pos); EliminaClave(nodo, clave); // wf.ModificaNodoIR(nodo); if (pag_n.Tipo != H) { wf.ModificaNodoIR(pag_n); } else { wf.ModificaNodo(pag_n); } //agregar nuevo nodo fusionado } } if (nodo.Tipo == R && nodo.M <= 0) { if (pag_n.Ptrs == null) { pag_n.Tipo = H; } else { pag_n.Tipo = R; } } if (nodo.M >= d && nodo.Tipo != R) { b = false; } else if (nodo.M > 0 && nodo.Tipo == R) { b = false; } if (!b) { wf.ModificaNodoIR(nodo); //modificar nodo actual } } } return(b); }
private bool Baja(TPagina nodo, Registro registro, string nombreArchivo) { bool b = false; WriteFile wf = new WriteFile(nombreArchivo); int pos; if (nodo.Tipo == H) { wf.InsertaRegistro(registro); // wf.InsertaRegistro(registro, nodo.M > 0 ? nodo.GetDireccion(Buscar(nodo, clave) - 1) : -1, nodo.M > 0 ? nodo.GetDireccion(Buscar(nodo, clave)) : -1); InsertaEnPag(nodo, clave, null, registro.Direccion); // nodo.SetDireccion(registro.Direccion, nodo.M - 1); if (nodo.M > 2 * d) { Divide(nodo); b = true; } else { wf.ModificaNodo(nodo); } } else { pos = Buscar(nodo, clave); b = Baja(nodo.GetPtrs(pos), registro, nombreArchivo); if (b) { if (pag_n.Tipo != H) { wf.InsertaNodoIR(pag_n); wf.ModificaNodoIR(nodo.GetPtrs(pos)); } else { wf.InsertaNodo(pag_n); wf.ModificaNodo(nodo.GetPtrs(pos)); } InsertaEnPag(nodo, clave, pag_n, pag_n.DireccionNodo); //escribir pag_n y actualizar nodo en pos //actualizar nodos despues de dividir if (nodo.M > 2 * d) { Divide(nodo); } else { b = false; if (nodo.Tipo != H) { wf.ModificaNodoIR(nodo); } else { wf.ModificaNodo(nodo); } //actualiza this nodo } } } return(b); }