示例#1
0
 public int Mayor(NodoPrioridad <T> a, NodoPrioridad <T> b)
 {
     if (a != null && b != null)
     {
         if (a.Altura > b.Altura)
         {
             return(a.Altura);
         }
         else
         {
             return(b.Altura);
         }
     }
     else if (a != null)
     {
         return(a.Altura);
     }
     else if (b != null)
     {
         return(b.Altura);
     }
     else
     {
         return(0);
     }
 }
示例#2
0
 void Delete(NodoPrioridad <T> Raiz, NodoPrioridad <T> Sig, Delegate Condicion)
 {
     if (Sig != null)
     {
         int Comparacion = Convert.ToInt32(Condicion.DynamicInvoke(Sig.Izquierda.Data, Raiz.Data));
         if (Comparacion == 0)
         {
             BuscarEliminar(Raiz, Sig, Condicion);
             Sig.Izquierda = null;
         }
         else
         {
             int Compa = Convert.ToInt32(Condicion.DynamicInvoke(Sig.Derecha.Data, Raiz.Data));
             if (Compa == 0)
             {
                 BuscarEliminar(Raiz, Sig, Condicion);
                 Sig.Derecha = null;
             }
             else
             {
                 Delete(Raiz, Sig.Siguiente, Condicion);
             }
         }
     }
 }
示例#3
0
        public void Insertar(NodoPrioridad <T> nuevo, NodoPrioridad <T> n, Delegate Comparacion)
        {
            if (n != null)
            {
                int compar = Convert.ToInt16(Comparacion.DynamicInvoke(nuevo.Data, n.Data));
                if (compar == 0)
                {
                }
                else if (compar > 0)
                {
                    if (n.Derecha != null)
                    {
                        Insertar(nuevo, n.Derecha, Comparacion);
                        n.Altura = Mayor(n.Derecha, n.Izquierda) + 1;
                    }
                    else
                    {
                        n.Derecha   = nuevo;
                        nuevo.Padre = n;
                        n.Altura    = Mayor(n.Derecha, n.Izquierda) + 1;
                    }
                }
                else
                {
                    if (n.Izquierda != null)
                    {
                        Insertar(nuevo, n.Izquierda, Comparacion);
                        n.Altura = Mayor(n.Derecha, n.Izquierda) + 1;
                    }
                    else
                    {
                        n.Izquierda = nuevo;
                        nuevo.Padre = n;
                        n.Altura    = Mayor(n.Derecha, n.Izquierda) + 1;
                    }
                }
            }
            int balanceo = Balanceo(n);

            if (balanceo > 1)
            {
                balanceo = Balanceo(n.Derecha);
                if (balanceo == -1)
                {
                    RotacionDer(n.Derecha);
                }
                RotacionIzq(n);
            }
            else if (balanceo < -1)
            {
                balanceo = Balanceo(n.Izquierda);
                if (balanceo == 1)
                {
                    RotacionIzq(n.Izquierda);
                }
                RotacionDer(n);
            }
        }
示例#4
0
        void BuscarEliminar(NodoPrioridad <T> Raiz, NodoPrioridad <T> Sig, Delegate Condicion)
        {
            int Comparar = Convert.ToInt32(Condicion.DynamicInvoke(Sig.Siguiente.Data, Raiz.Data));

            if (Comparar == 0)
            {
                Sig.Siguiente = null;
            }
            else
            {
                BuscarEliminar(Raiz, Sig.Siguiente, Condicion);
            }
        }
示例#5
0
 void BuscarValorUltimo(NodoPrioridad <T> Raiz)
 {
     if (Raiz != null)
     {
         if (Raiz.Siguiente == null)
         {
             Ultimo = Raiz;
         }
         else
         {
             BuscarValorUltimo(Raiz.Siguiente);
         }
     }
 }
示例#6
0
 void InsertarNuevoSiguiente(NodoPrioridad <T> Nuevo, NodoPrioridad <T> Raiz)
 {
     if (Raiz != null)
     {
         if (Raiz.Siguiente == null)
         {
             Raiz.Siguiente = Nuevo;
             Ultimo         = Nuevo;
         }
         else
         {
             InsertarNuevoSiguiente(Nuevo, Raiz.Siguiente);
         }
     }
 }
示例#7
0
 public T returnNode(Delegate Condicion, T Default)
 {
     if (Primero != null)
     {
         T Apoyo = Primero.Data;
         Primero.Data = Ultimo.Data;
         if (Primero.Siguiente != null)
         {
             int Comparacion = Convert.ToInt32(Condicion.DynamicInvoke(Primero.Siguiente.Data, Primero.Data));
             if (Comparacion == 0)
             {
                 int Compa = Convert.ToInt32(Condicion.DynamicInvoke(Primero.Izquierda.Data, Primero.Data));
                 if (Compa == 0)
                 {
                     Primero.Izquierda = null;
                     Primero.Siguiente = null;
                 }
                 else
                 {
                 }
             }
             else
             {
                 int Cont = Convert.ToInt32(Condicion.DynamicInvoke(Primero.Derecha.Data, Primero.Data));
                 if (Cont == 0)
                 {
                     Primero.Derecha             = null;
                     Primero.Izquierda.Siguiente = null;
                 }
                 else
                 {
                     Delete(Primero, Primero.Siguiente, Condicion);
                 }
             }
         }
         else
         {
             Primero = null;
             Ultimo  = null;
         }
         BuscarValorUltimo(Primero);
         return(Apoyo);
     }
     else
     {
         return(Default);
     }
 }
示例#8
0
        public void InsertQueue(T Nuevo)
        {
            NodoPrioridad <T> Estruct = new NodoPrioridad <T>();

            Estruct.Data = Nuevo;
            if (Primero == null)
            {
                Primero        = Estruct;
                Estruct.Arriba = null;
                Ultimo         = Estruct;
            }
            else
            {
                InsertQueu(Estruct, Primero);
                InsertarNuevoSiguiente(Estruct, Primero);
            }
        }
示例#9
0
        public void Insertar(T nMedicina, Delegate Comparacion)
        {
            NodoPrioridad <T> nuevo = new NodoPrioridad <T>();

            nuevo.Data      = nMedicina;
            nuevo.Izquierda = null;
            nuevo.Derecha   = null;
            nuevo.Padre     = null;
            nuevo.Altura    = 1;
            if (Raiz == null)
            {
                Raiz = nuevo;
            }
            else
            {
                Insertar(nuevo, Raiz, Comparacion);
            }
        }
示例#10
0
 public int Balanceo(NodoPrioridad <T> N)
 {
     if (N.Derecha != null && N.Izquierda != null)
     {
         return(N.Derecha.Altura - N.Izquierda.Altura);
     }
     else if (N.Derecha != null)
     {
         return(N.Derecha.Altura);
     }
     else if (N.Izquierda != null)
     {
         return(0 - N.Izquierda.Altura);
     }
     else
     {
         return(0);
     }
 }
示例#11
0
 void InsertQueu(NodoPrioridad <T> Nuevo, NodoPrioridad <T> Raiz)
 {
     if (Raiz.Derecha == null || Raiz.Izquierda == null)
     {
         if (Raiz.Izquierda == null)
         {
             Raiz.Izquierda = Nuevo;
             Nuevo.Arriba   = Raiz;
         }
         else
         {
             Raiz.Derecha = Nuevo;
             Nuevo.Arriba = Raiz;
         }
     }
     else
     {
         InsertQueu(Nuevo, Raiz.Siguiente);
     }
 }
示例#12
0
        T Buscar(string nBuscar, NodoPrioridad <T> N, Delegate Comparacion, T Default)
        {
            T Nuevo;

            if (N != null)
            {
                int Verificacion = Convert.ToInt16(Comparacion.DynamicInvoke(nBuscar, N.Data));
                if (Verificacion != 0)
                {
                    int compar = Convert.ToInt16(Comparacion.DynamicInvoke(nBuscar, N.Data));
                    if (compar < 0)
                    {
                        if (N.Izquierda != null)
                        {
                            Nuevo = Buscar(nBuscar, N.Izquierda, Comparacion, Default);
                            return(Nuevo);
                        }
                        else
                        {
                            return(default);
示例#13
0
 void HeapSort(NodoPrioridad <T> Siguiente, Delegate Condicion)
 {
     if (Siguiente != null)
     {
         if (Siguiente.Derecha != null && Siguiente.Izquierda != null)
         {
             int IzquierdaDerecha = Convert.ToInt32(Condicion.DynamicInvoke(Siguiente.Izquierda.Data, Siguiente.Derecha.Data));
             if (IzquierdaDerecha > 0)
             {
                 int PadreDerecha = Convert.ToInt32(Condicion.DynamicInvoke(Siguiente.Data, Siguiente.Derecha.Data));
                 if (PadreDerecha > 0)
                 {
                     T Almacenar;
                     Almacenar              = Siguiente.Data;
                     Siguiente.Data         = Siguiente.Derecha.Data;
                     Siguiente.Derecha.Data = Almacenar;
                     HeapSort(Condicion);
                 }
                 else
                 {
                     HeapSort(Siguiente.Siguiente, Condicion);
                 }
             }
             else if (IzquierdaDerecha < 0)
             {
                 int PadreIzquierda = Convert.ToInt32(Condicion.DynamicInvoke(Siguiente.Data, Siguiente.Izquierda.Data));
                 if (PadreIzquierda > 0)
                 {
                     T Almacenar;
                     Almacenar                = Siguiente.Data;
                     Siguiente.Data           = Siguiente.Izquierda.Data;
                     Siguiente.Izquierda.Data = Almacenar;
                     HeapSort(Condicion);
                 }
                 else
                 {
                     HeapSort(Siguiente.Siguiente, Condicion);
                 }
             }
         }
         else if (Siguiente.Izquierda != null)
         {
             int PadreIzquierda = Convert.ToInt32(Condicion.DynamicInvoke(Siguiente.Data, Siguiente.Izquierda.Data));
             if (PadreIzquierda > 0)
             {
                 T Almacenar;
                 Almacenar                = Siguiente.Data;
                 Siguiente.Data           = Siguiente.Izquierda.Data;
                 Siguiente.Izquierda.Data = Almacenar;
                 HeapSort(Condicion);
             }
             else
             {
                 HeapSort(Siguiente.Siguiente, Condicion);
             }
         }
         else
         {
             return;
         }
     }
     else
     {
         return;
     }
 }
示例#14
0
 public void RaízC()
 {
     Raiz = null;
 }
示例#15
0
 public ArbolBinario()
 {
     Raiz = null;
 }