コード例 #1
0
ファイル: Cubeta.cs プロジェクト: Alemman/EditordeGrafos
 private void Inserta(CRegistro registro)
 {
     //manejar aumento de no_reg
     registros.Add(registro);
     registros.Sort(delegate(CRegistro x, CRegistro y)
     {
         if (x == null && y == null)
         {
             return(0);
         }
         else if (x == null)
         {
             return(-1);
         }
         else if (y == null)
         {
             return(1);
         }
         else
         {
             return(x.Clave.CompareTo(y.Clave));
         }
     });
     noRegistro++;
 }
コード例 #2
0
 public FormHash()
 {
     InitializeComponent();
     archivo  = new Archivo("Untitle", Application.StartupPath + "\\ProyectosGrafo\\Hash\\");
     registro = new CRegistro(26);
     tabla    = new TablaHash(26, 4, 10, 10);
 }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
 private void buttonCerrar_Click(object sender, EventArgs e)
 {
     HabilitarAbrirCrear(true);
     tabla      = new TablaHash(26, 4, 10, 10);
     archivo    = new Archivo("Untitle", Application.StartupPath + "\\ProyectosGrafo\\Hash\\");
     registro   = new CRegistro(26);
     nombreArch = "";
     HabilitarEliminaAgrega(false);
     buttonCerrar.Enabled = false;
     LimpiarCubeta();
     LimpiarTablaHash();
     textBoxCV.Text = "0";
     textBoxN1.Text = "";
     textBoxN2.Text = "";
 }
コード例 #5
0
ファイル: Cubeta.cs プロジェクト: Alemman/EditordeGrafos
        public Cubeta Insertar(CRegistro registro)
        {
            //cubeta que llama esta vacia

            /* if (registros.Count == MAX_REG)
             * {
             *   Cubeta c = new Cubeta(MAX_REG);
             *   c.registros.Add(registro);
             *   c.NoRegistros++;
             *   return c;
             * }
             * else
             * {*/
            registros.Add(registro);
            noRegistro++;
            // }
            return(null);
        }
コード例 #6
0
ファイル: TablaHash.cs プロジェクト: Alemman/EditordeGrafos
        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);
            }
        }
コード例 #7
0
ファイル: Cubeta.cs プロジェクト: Alemman/EditordeGrafos
        public long InsertaRegistro(CRegistro registro /*, string path*/)
        {
            Archivo a = new Archivo("", "");
            //maneja desbordamiento y insercion ordenanda
            long dir, ant, d = direccion;

            if (registros.Count < MAX_REG)
            {
                Inserta(registro);
                d = a.EscribirCubeta(this);
                //direccion = d = a.EscribirCubeta(this); checar retorno de cubeta con valor actualizdo
            }
            else
            {
                Cubeta    cc = new Cubeta(MAX_REG);
                CRegistro regAux;
                if (registros[registros.Count - 1].Clave > registro.Clave)
                {
                    regAux = new CRegistro(registros[registros.Count - 1]);
                    registros.RemoveAt(registros.Count - 1);
                    Inserta(registro);
                    d = a.EscribirCubeta(this);
                }
                else
                {
                    regAux = registro;
                }

                dir = dirSigCubeta;
                if (dir != -1)
                {
                    a.LeerCubeta(dir, cc);
                    cc.InsertaRegistro(regAux);
                }
                else
                {
                    //crear cubeta y encadena
                    dirSigCubeta = cc.InsertaRegistro(regAux);
                }
            }
            return(d);
        }
コード例 #8
0
ファイル: CRegistro.cs プロジェクト: Alemman/EditordeGrafos
 public CRegistro(CRegistro r)
 {
 }