Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        public void InsertaNodoIR(TPagina Nodo)
        {
            long r = -1;
            int  c = -1;

            try
            {
                using (FileStream fs = new FileStream(
                           path,
                           FileMode.Open,
                           FileAccess.Write))
                {
                    fs.Seek(0, SeekOrigin.End);
                    using (BinaryWriter bw = new BinaryWriter(fs))
                    {
                        Nodo.DireccionNodo = fs.Position;
                        bw.Write(fs.Position);

                        bw.Write(Nodo.Tipo);

                        for (int i = 0; i < Nodo.Claves.Length; i++)
                        {
                            if (i < Nodo.M)
                            {
                                bw.Write(Nodo.GetDireccion(i));
                                bw.Write(Nodo.GetClave(i));
                            }
                            else if (i == Nodo.M && Nodo.GetDireccion(i) > 0)
                            {
                                bw.Write(Nodo.GetDireccion(Nodo.M));
                                if (i < Nodo.Claves.Length - 1)
                                {
                                    bw.Write(c);
                                }
                            }
                            else
                            {
                                bw.Write(r);
                                if (i < Nodo.Claves.Length - 1)
                                {
                                    bw.Write(c);
                                }
                            }
                        }
                    }
                }
            }
            catch (FileNotFoundException ioE)
            {
                Console.WriteLine(ioE);
            }
        }
Exemplo n.º 3
0
 private void AgregaArbol(TPagina nodo, int i)
 {
     if (nodo != null)
     {
         if (nodo.Tipo != H)
         {
             CargaNodo(nodo, indexA);
             //MessageBox.Show(i.ToString());
             //i += 1;
             for (int j = 0; j < 5; j++)
             {
                 if (nodo.GetDireccion(j) > 0)
                 {
                     AgregaArbol(nodo.GetPtrs(j), ++indexA);
                 }
                 else
                 {
                     break;
                 }
             }
         }
         else
         {
             CargaNodo(nodo, indexA);
             // i += 1;
         }
     }
 }
Exemplo n.º 4
0
        private TPagina InsertaFusion(TPagina nodo1, TPagina nodo2, int clave)
        {
            int i, j;

            TPagina aux;

            aux = CreaPagina(d, nodo1.Tipo);

            for (i = 0; i < nodo1.M; i++)
            {
                InsertaEnPag(aux, nodo1.GetClave(i), null, nodo1.GetDireccion(i));
                if (nodo1.Tipo != H)
                {
                    aux.SetPtrs(nodo1.GetPtrs(i), i);
                    aux.SetDireccion(nodo1.GetDireccion(i), i);
                }
            }

            if (aux.Tipo != H)
            {
                aux.SetPtrs(nodo1.GetPtrs(i), aux.M);
                // aux.SetDireccion(nodo1.GetDireccion(i), aux.M);
                InsertaEnPag(aux, clave, null, nodo1.GetDireccion(i));
                aux.SetDireccion(nodo1.GetDireccion(i), aux.M - 1);
            }


            i = aux.M;

            for (j = 0; j < nodo2.M; j++)
            {
                InsertaEnPag(aux, nodo2.GetClave(j), null, nodo2.GetDireccion(j));
                if (nodo2.Tipo != H)
                {
                    aux.SetPtrs(nodo2.GetPtrs(j), i + j);
                    aux.SetDireccion(nodo2.GetDireccion(j), i + j);
                }
            }

            if (aux.Tipo != H)
            {
                aux.SetPtrs(nodo2.GetPtrs(j), aux.M);
                aux.SetDireccion(nodo2.GetDireccion(j), aux.M);
            }

            return(aux);
        }
Exemplo n.º 5
0
        private void CargaNodo(TPagina nodo, int k)
        {
            // LimpiaTablaArbol();

            dataGridView2.Rows.Add();
            dataGridView2.Rows[k].Cells[0].Value  = nodo.DireccionNodo;
            dataGridView2.Rows[k].Cells[1].Value  = nodo.Tipo;
            dataGridView2.Rows[k].Cells[2].Value  = nodo.GetDireccion(0);
            dataGridView2.Rows[k].Cells[3].Value  = nodo.GetClave(0);
            dataGridView2.Rows[k].Cells[4].Value  = nodo.GetDireccion(1);
            dataGridView2.Rows[k].Cells[5].Value  = nodo.GetClave(1);
            dataGridView2.Rows[k].Cells[6].Value  = nodo.GetDireccion(2);
            dataGridView2.Rows[k].Cells[7].Value  = nodo.GetClave(2);
            dataGridView2.Rows[k].Cells[8].Value  = nodo.GetDireccion(3);
            dataGridView2.Rows[k].Cells[9].Value  = nodo.GetClave(3);
            dataGridView2.Rows[k].Cells[10].Value = nodo.GetDireccion(4);
        }
Exemplo n.º 6
0
        private void PrestaClave(TPagina nodo1, TPagina nodo2, int cb)
        {
            if (nodo1.GetClave(nodo1.M - 1) > nodo2.GetClave(nodo2.M - 1))
            {
                //izquierda presta
                if (nodo1.Tipo != H)
                {
                    InsertaEnPag(nodo1, cb, nodo2.GetPtrs(nodo2.M), nodo2.GetDireccion(nodo2.M));
                    clave = nodo2.GetClave(nodo2.M - 1);
                    EliminaClave(nodo2, nodo2.GetClave(nodo2.M - 1));
                }
                else
                {
                    InsertaEnPag(nodo1, nodo2.GetClave(nodo2.M - 1), null, nodo2.GetDireccion(nodo2.M - 1));
                    clave = nodo2.GetClave(nodo2.M - 1);
                    EliminaClave(nodo2, nodo2.GetClave(nodo2.M - 1));
                }
            }
            else
            {
                if (nodo1.Tipo != H)
                {
                    InsertaEnPag(nodo1, cb, nodo2.GetPtrs(0), nodo2.GetDireccion(0));

                    EliminaClave(nodo2, nodo2.GetClave(0));
                    clave = nodo2.GetClave(0);
                }
                else
                {
                    // InsertaEnPag(nodo1, cb, null, nodo2.GetDireccion(0));
                    InsertaEnPag(nodo1, nodo2.GetClave(0), null, nodo2.GetDireccion(0));

                    EliminaClave(nodo2, nodo2.GetClave(0));
                    clave = nodo2.GetClave(0);
                }
            }
        }
Exemplo n.º 7
0
        private void Divide(TPagina nodo)
        {
            TPagina aux;
            int     j;

            //cambiar RH por I
            aux = CreaPagina(d, nodo.Tipo == R ? I : nodo.Tipo);


            for (j = nodo.M - 1; j > d; j--, nodo.M--)
            {
                if (nodo.Tipo != H)
                {
                    InsertaEnPag(aux, nodo.GetClave(j), nodo.GetPtrs(j + 1), nodo.GetDireccion(j + 1));
                }
                else
                {
                    InsertaEnHoja(aux, nodo.GetClave(j), null, nodo.GetDireccion(j));
                }
            }
            if (nodo.Tipo != H)
            {
                aux.SetPtrs(nodo.GetPtrs(j + 1), 0);
                aux.SetDireccion(nodo.GetDireccion(j + 1), 0);
            }

            clave = nodo.GetClave(j);
            if (nodo.Tipo == H)
            {
                aux.SetClaves(clave, 0);
                aux.SetDireccion(nodo.GetDireccion(j), 0);
                aux.M++;
            }
            //printf("\nj: %d\n", j);
            pag_n = aux;
            nodo.M--;
        }
Exemplo n.º 8
0
        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;
        }
Exemplo n.º 9
0
        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;
        }