Beispiel #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;
        }
Beispiel #2
0
        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);
                }
            }
        }
Beispiel #3
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;
        }
Beispiel #4
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;
        }
Beispiel #5
0
        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);
        }