示例#1
0
        public void Sucesor(Pagina raiz, int pos)
        {
            Pagina q = raiz.Ramas[pos];

            while (!pagVacia(q.Ramas[0]))
            {
                q = q.Ramas[0];
            }
            raiz.Claves[pos - 1] = q.Claves[0];
        }
示例#2
0
        public void ALV(Pagina raiz, int pos)// O sea quitar XD
        {
            int j = pos + 1;

            while (j != raiz.Cuentas + 1)
            {
                raiz.Claves[j - 2] = raiz.Claves[j - 1];
                raiz.Ramas[j - 1]  = raiz.Ramas[j];
                j++;
            }
            raiz.Cuentas--;
        }
示例#3
0
 public void InsertarYa(Nodo clave, Pagina raiz)//insertara el nuevo nodo en la raiz que manden como parametro
 {
     Empujar(clave, raiz);
     if (EmpujarArriba)
     {
         principal           = new Pagina();
         principal.Cuentas   = 1;
         principal.Claves[0] = Mov;
         principal.Ramas[0]  = raiz;
         principal.Ramas[1]  = NRaiz;
     }
     Console.WriteLine("Se inserto " + clave.Id);
 }
示例#4
0
        public void InsertarClave(Nodo clave, Pagina raiz, int k)
        {
            int i = raiz.Cuentas;

            while (i != k)
            {
                raiz.Claves[i]    = raiz.Claves[i - 1];
                raiz.Ramas[i + 1] = raiz.Ramas[i];
                --i;
            }
            raiz.Claves[k]    = clave;
            raiz.Ramas[k + 1] = NRaiz;
            raiz.Cuentas      = ++raiz.Cuentas;
        }
示例#5
0
        //========================varios===============================
        public void imprimir(Pagina raiz)
        {
            Console.WriteLine(hijos.Dequeue());
            int  a = 0;
            Nodo impresion;

            for (int i = 0; i < raiz.Cuentas; i++)
            {
                impresion = raiz.Claves[i];
                if (impresion == null)
                {
                    i = 5;
                    break;
                }
                else
                {
                    Console.WriteLine(num + ". " + raiz.Claves[i].Id);
                    num++;
                }
            }



            if (raiz.Ramas[0] != null)
            {
                Pagina ram;
                for (int i = 0; i < raiz.Cuentas + 1; i++)
                {
                    ram = raiz.Ramas[i];
                    if (ram == null)
                    {
                        break;
                    }
                    hijos.Enqueue("rama no. " + i + " de la pagina que inicia con " + raiz.Claves[0].Id);
                    lista.Enqueue(raiz.Ramas[i]);
                }
            }



            try
            {
                imprimir(lista.Dequeue());
            }
            catch (Exception)
            {
                Console.WriteLine("Se imprimieron todos los nodos");
            }
        }
示例#6
0
        public void MoverDer(Pagina raiz, int pos)
        {
            int i = raiz.Ramas[pos].Cuentas;

            while (i != 0)
            {
                raiz.Ramas[pos].Claves[i]    = raiz.Ramas[pos].Claves[i - 1];
                raiz.Ramas[pos].Ramas[i + 1] = raiz.Ramas[pos].Ramas[i];
                --i;
            }
            raiz.Ramas[pos].Cuentas++;
            raiz.Ramas[pos].Ramas[1]  = raiz.Ramas[pos].Ramas[0];
            raiz.Ramas[pos].Claves[0] = raiz.Claves[pos - 1];
            raiz.Claves[pos - 1]      = raiz.Ramas[pos - 1].Claves[raiz.Ramas[pos - 1].Cuentas - 1];
            raiz.Ramas[pos].Ramas[0]  = raiz.Ramas[pos - 1].Ramas[raiz.Ramas[pos - 1].Cuentas];
            raiz.Ramas[pos - 1].Cuentas--;
        }
示例#7
0
        public void MoverIzq(Pagina raiz, int pos)
        {
            int i;

            raiz.Ramas[pos - 1].Cuentas++;
            raiz.Ramas[pos - 1].Claves[raiz.Ramas[pos - 1].Cuentas - 1] = raiz.Claves[pos - 1];
            raiz.Ramas[pos - 1].Ramas[raiz.Ramas[pos - 1].Cuentas]      = raiz.Ramas[pos].Ramas[0];
            raiz.Claves[pos - 1]     = raiz.Ramas[pos].Claves[0];
            raiz.Ramas[pos].Ramas[0] = raiz.Ramas[pos].Ramas[1];
            raiz.Ramas[pos].Cuentas--;
            i = 1;
            while (i != raiz.Ramas[pos].Cuentas + 1)
            {
                raiz.Ramas[pos].Claves[i - 1] = raiz.Ramas[pos].Claves[i];
                raiz.Ramas[pos].Ramas[i]      = raiz.Ramas[pos].Ramas[i + 1];
                i++;
            }
        }
示例#8
0
        public void Combinar(Pagina raiz, int pos)
        {
            int j;

            MovDer = raiz.Ramas[pos];
            MovIz  = raiz.Ramas[pos - 1];
            MovIz.Cuentas++;
            MovIz.Claves[MovIz.Cuentas - 1] = raiz.Claves[pos - 1];
            MovIz.Ramas[MovIz.Cuentas]      = MovDer.Ramas[0];


            j = 1;
            while (j != MovDer.Cuentas + 1)
            {
                MovIz.Cuentas++;
                MovIz.Claves[MovIz.Cuentas - 1] = MovDer.Claves[j - 1];
                MovIz.Ramas[MovIz.Cuentas]      = MovDer.Ramas[j];
                j++;
            }
            ALV(raiz, pos);
        }
示例#9
0
 public void Restablecer(Pagina raiz, int pos)
 {
     if (pos > 0)
     {
         if (raiz.Ramas[pos - 1].Cuentas > 2)
         {
             MoverDer(raiz, pos);
         }
         else
         {
             Combinar(raiz, pos);
         }
     }
     else if (raiz.Ramas[1].Cuentas > 2)
     {
         MoverIzq(raiz, 1);
     }
     else
     {
         Combinar(raiz, 1);
     }
 }
示例#10
0
        public void Empujar(Nodo clave, Pagina raiz)
        {
            int k = 0;

            Esta = false;
            if (pagVacia(raiz))
            {
                EmpujarArriba = true;
                Mov           = clave;
                NRaiz         = null;
            }
            else
            {
                k = BuscarNodo(clave, raiz);
                if (Esta)
                {
                    Console.WriteLine("No hay claves repetidas");
                    EmpujarArriba = false;
                }
                else
                {
                    Empujar(clave, raiz.Ramas[k]);
                    if (EmpujarArriba)
                    {
                        if (raiz.Cuentas < 4)
                        {
                            EmpujarArriba = false;
                            InsertarClave(Mov, raiz, k);
                        }
                        else
                        {
                            EmpujarArriba = true;
                            MoverNodos(Mov, raiz, k);
                        }
                    }
                }
            }
        }
示例#11
0
        public void MoverNodos(Nodo Clave, Pagina Raiz, int k)
        {
            int pos    = 0;
            int pMedia = 0;

            if (k <= 2)
            {
                pMedia = 2;//
            }
            else
            {
                pMedia = 3;
            }
            Pagina Mder = new Pagina();

            pos = pMedia + 1;
            while (pos != 5)
            {
                Mder.Claves[(pos - pMedia) - 1] = Raiz.Claves[pos - 1];
                Mder.Ramas[pos - pMedia]        = Raiz.Ramas[pos];
                ++pos;
            }
            Mder.Cuentas = 4 - pMedia;
            Raiz.Cuentas = pMedia;
            if (k <= 2)
            {
                InsertarClave(Clave, Raiz, k);
            }
            else
            {
                InsertarClave(Clave, Mder, (k - pMedia));
            }
            Mov           = Raiz.Claves[Raiz.Cuentas - 1];
            Mder.Ramas[0] = Raiz.Ramas[Raiz.Cuentas];
            Raiz.Cuentas  = --Raiz.Cuentas;
            NRaiz         = Mder;
        }
示例#12
0
 public void Eliminara(Pagina Raiz, Nodo clave)
 {
     try
     {
         EliminarRegistro(Raiz, clave);
     }
     catch (Exception e)
     {
         Esta = false;
     }
     if (!Esta)
     {
         Console.WriteLine("No se encontro el elemento");
     }
     else
     {
         if (Raiz.Cuentas == 0)
         {
             Raiz = Raiz.Ramas[0];
         }
         principal = Raiz;
         Console.WriteLine("Se elimino" + clave.Id);
     }
 }
示例#13
0
 public bool pagVacia(Pagina raiz)
 {
     return(raiz == null || raiz.Cuentas == 0); //metodo guay :33
 }