public void InsertaRegistro(CRegistro registro) { Cubeta C = new Cubeta(noRegistros); Archivo archivo = new Archivo(nombre, path); int posicion = tabla.Hash(registro.Clave); long dirC = tabla.Cajones[posicion]; if (dirC == -1) { dirC = tabla.PtrsCubetaVacia; if (dirC != -1) { archivo.LeerCubeta(dirC, C); tabla.PtrsCubetaVacia = C.DirSigCubeta; C.DirSigCubeta = -1; } C.Insertar(registro); C.Direccion = tabla.Cajones[posicion] = archivo.EscribirCubeta(C); archivo.EscribirTablaH(tabla); } else { long ant; dirC = tabla.Cajones[posicion]; do { C = new Cubeta(noRegistros); archivo.LeerCubeta(dirC, C); ant = dirC; dirC = C.DirSigCubeta; } while (C.NoRegistros >= noRegistros && dirC != -1); if (C.NoRegistros < noRegistros) { C.Insertar(registro); C.Direccion = ant; archivo.EscribirCubeta(C); } else { Cubeta cc = new Cubeta(noRegistros); if (tabla.PtrsCubetaVacia != -1) { archivo.LeerCubeta(tabla.PtrsCubetaVacia, cc); tabla.PtrsCubetaVacia = cc.DirSigCubeta; cc.DirSigCubeta = -1; } cc.Insertar(registro); C.Direccion = ant; C.DirSigCubeta = cc.Direccion = archivo.EscribirCubeta(cc); archivo.EscribirCubeta(C); } // archivo.LeerCubeta(dirC, C); // C.InsertaRegistro(registro); } }
public void EliminaRegistro(int clave) { bool encontrado = false; int p = tabla.Hash(clave); long dirC = tabla.Cajones[p]; Cubeta C = new Cubeta(noRegistros); Cubeta ant = new Cubeta(noRegistros); Archivo archivo = new Archivo(nombre, path); if (dirC != -1) { do { archivo.LeerCubeta(dirC, C); encontrado = C.Encontrado(clave); if (!encontrado) { ant = C; dirC = C.DirSigCubeta; C = new Cubeta(noRegistros); } } while (!encontrado && dirC != -1); if (encontrado) { C.EliminaRegistro(clave); if (C.Vacio()) { if (C.Direccion == tabla.Cajones[p]) { tabla.Cajones[p] = C.DirSigCubeta; } else { ant.DirSigCubeta = C.DirSigCubeta; archivo.EscribirCubeta(ant); } C.DirSigCubeta = tabla.PtrsCubetaVacia; tabla.PtrsCubetaVacia = C.Direccion; archivo.EscribirTablaH(tabla); } archivo.EscribirCubeta(C); } } }
public void InsertaRegistro(CRegistro registro) { Cubeta C = new Cubeta(noRegistros); Archivo a = new Archivo("", ""); int posicion = Hash(registro.Clave); long dirC = cajones[posicion]; if (dirC == -1) { dirC = ptrsCubetaVacia; if (dirC != -1) { a.LeerCubeta(cajones[posicion], C); ptrsCubetaVacia = C.DirSigCubeta; C.DirSigCubeta = -1; } C.InsertaRegistro(registro); //a = a eso cajones[posicion] = C.Direccion; // o cajones[posicion] = C.InsertaRegistro(registro); // cajones[posicion] = a.EscribirCubeta(C); a.EscribirTablaH(this); } else { long ant; dirC = cajones[posicion]; do { a.LeerCubeta(dirC, C); ant = dirC; } while ((dirC = C.DirSigCubeta) != -1 && C.Registros[C.Registros.Count - 1].Clave < registro.Clave); if (C.Registros[C.Registros.Count - 1].Clave > registro.Clave) { if (C.Registros[0].Clave > registro.Clave) { dirC = ant; } } a.LeerCubeta(dirC, C); C.InsertaRegistro(registro); } }
private void buttonCrear_Click(object sender, EventArgs e) { if (nombreArch != "") { if (!File.Exists(path + nombreArch)) { if (!DatVacio()) { tabla = new TablaHash(26, (int)numericNoReg.Value, (int)numericCajas.Value, (int)numericCajas.Value); archivo.EscribirTablaH(tabla); LimpiarCubeta(); MuestraDatos(); LimpiarTablaHash(); MuestraTabla(); HabilitarAbrirCrear(false); buttonCerrar.Enabled = true; HabilitarEliminaAgrega(true); } else { MessageBox.Show ( "Campos Vacios !!!", "Danger", MessageBoxButtons.OK, MessageBoxIcon.Exclamation ); } } else { MessageBox.Show ( "El Archivo Ya Existe !!!", "Danger", MessageBoxButtons.OK, MessageBoxIcon.Exclamation ); } //textBoxN1.Text = ""; } }