private void InsertaEnPag(TPagina nodo, int clave, TPagina nuevo, long dir) { int i; for (i = nodo.M - 1; i >= 0 && nodo.GetClave(i) > clave; i--) { nodo.SetClaves(nodo.GetClave(i), i + 1); if (nodo.Tipo == H) { nodo.SetDireccion(nodo.GetDireccion(i), i + 1); } if (nodo.Tipo != H) { nodo.SetDireccion(nodo.GetDireccion(i + 1), i + 2); nodo.SetPtrs(nodo.GetPtrs(i + 1), i + 2); } } // printf("\ni: %d\n", i); nodo.SetClaves(clave, i + 1); if (nodo.Tipo == H) { nodo.SetDireccion(dir, i + 1); } if (nodo.Tipo != H) { nodo.SetDireccion(dir, i + 2); nodo.SetPtrs(nuevo, i + 2); } nodo.M += 1; }
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 EliminaClave(TPagina nodo, int clave) { int i, index = Buscar(nodo, clave); for (i = Buscar(nodo, clave) - 1; i < nodo.M; i++) { nodo.SetClaves(nodo.GetClave(i + 1), i); nodo.SetDireccion(nodo.GetDireccion(i + 1), i); if (nodo.Tipo != H) { nodo.SetPtrs(nodo.GetPtrs(i + 2), i + 1); } } if (nodo.Tipo != H) { nodo.SetPtrs(pag_n, index - 1 >= 0 ? index - 1 : 0); nodo.SetDireccion(pag_n.DireccionNodo, index - 1 >= 0 ? index - 1 : 0); } nodo.M -= 1; }
private void InsertaEnHoja(TPagina nodo, int clave, TPagina nuevo, long dir) { int i; for (i = nodo.M - 1; i >= 0 && nodo.GetClave(i + 1) > clave; i--) { nodo.SetClaves(nodo.GetClave(i + 1), i + 2); nodo.SetDireccion(nodo.GetDireccion(i + 1), i + 2); if (nodo.Tipo != H) { nodo.SetPtrs(nodo.GetPtrs(i + 2), i + 3); } } nodo.SetClaves(clave, i + 2); nodo.SetDireccion(dir, i + 2); if (nodo.Tipo != H) { nodo.SetPtrs(nuevo, i + 3); } nodo.M += 1; }
private TPagina CreaPagina(int d, int t) { TPagina nuevo = new TPagina(); int i; nuevo.M = 0; nuevo.Tipo = t; nuevo.Claves = new int[(2 * d) + 1]; nuevo.Direccion = new long[(2 * d) + 2]; if (nuevo.Tipo == H) { nuevo.Ptrs = null; } else { nuevo.Ptrs = new TPagina[(2 * d) + 2]; for (i = 0; i < 2 * d + 1; i++) { nuevo.SetPtrs(null, i); } } return(nuevo); }