示例#1
0
        internal void SepararNodo(string llave, T dato, int hijoDerecho, Nodo <T> nuevoNodo, ref string llavePorSubir, ref T datoPorSubir)
        {
            if (!Lleno)
            {
                throw new Exception("Uno nodo solo puede separarse si está lleno");
            }
            Llaves.Add("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
            Datos.Add(dato);
            Hijos.Add(Utilidades.apuntadoVacio);
            AgregarDato(llave, dato, hijoDerecho, false);
            int mitad = (Orden / 2);

            llavePorSubir = Utilidades.FormatearLlave(Llaves[mitad]);
            datoPorSubir  = Datos[mitad];
            Llaves[mitad] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
            int j = 0;

            for (int i = mitad + 1; i < Llaves.Count; i++)
            {
                nuevoNodo.Llaves[j] = Llaves[i];
                nuevoNodo.Datos[j]  = Datos[i];
                Llaves[i]           = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
                j++;
            }
            j = 0;
            for (int i = mitad + 1; i < Hijos.Count; i++)
            {
                nuevoNodo.Hijos[j] = Hijos[i];
                Hijos[i]           = Utilidades.apuntadoVacio;
                j++;
            }
            Llaves.RemoveAt(Llaves.Count - 1);
            Datos.RemoveAt(Datos.Count - 1);
            Hijos.RemoveAt(Hijos.Count - 1);
        }
示例#2
0
        public void InsertEdge(Nodo hijo1)
        {
            for (int x = 0; x < Hijos.Count; x++)
            {
                if (Hijos[x].Keys[0] > hijo1.Keys[0])
                {
                    Hijos.Insert(x, hijo1);
                    return;
                }
            }

            Hijos.Add(hijo1);
            hijo1.Padres = this;
        }
        public void InsertarHijo(NodoB son)
        {
            for (int x = 0; x < Hijos.Count; x++)
            {
                if (this.CompareTo(son, x) > 0)
                {
                    Hijos.Insert(x, son);
                    return;
                }
            }

            Hijos.Add(son);
            son.Padre = this;
        }
示例#4
0
文件: Nodo.cs 项目: Jocagi/EDI
        public void insertarNodo(Nodo nodo)
        {
            for (int x = 0; x < Hijos.Count; x++)
            {
                if (compararMedicamentos(Hijos[x].Llaves[0], nodo.Llaves[0]))
                {
                    Hijos.Insert(x, nodo);
                    return;
                }
            }

            Hijos.Add(nodo);
            nodo.Padre = this;
        }
示例#5
0
        public void InsertarHijo(Nodo hijo)
        {
            for (int x = 0; x < Hijos.Count; x++)
            {
                if (this.CompareTo(hijo, x) > 0)
                {
                    Hijos.Insert(x, hijo);
                    return;
                }
            }

            Hijos.Add(hijo);
            hijo.Padre = this;
        }
示例#6
0
        public void InsertarHijo(Nodo Hijo)
        {
            for (int x = 0; x < Hijos.Count; x++)
            {
                if (Hijos[x].Valores[0].CompareTo(Hijo.Valores[0]) > 0)
                {
                    Hijos.Insert(x, Hijo);
                    return;
                }
            }


            Hijos.Add(Hijo);
            Hijo.Padre = this;
        }
 public void limpiarHijos()
 {
     if (Hijos.Count != 0)
     {
         for (int i = 0; i < Hijos.Count; i++)
         {
             Hijos[i] = Generador.hacerNulo();
         }
     }
     else
     {
         for (int i = 0; i < Orden; i++)
         {
             Hijos.Add(Generador.hacerNulo());
         }
     }
 }
示例#8
0
        internal void SepararNodo(string llave, T dato, int hijoDerecho, NodoB <T> nuevoNodo, ref string llavePorSubir, ref T datoPorSubir)
        {
            if (!Lleno)
            {
                throw new Exception("Uno nodo solo puede separarse si está lleno");
            }

            // Incrementar el tamaño de las listas en una posición
            Llaves.Add("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
            Datos.Add(dato);
            Hijos.Add(Utilidades.ApuntadorVacio);

            // Agregar los nuevos elementos en orden
            AgregarDato(llave, dato, hijoDerecho, false);

            // Obtener los valores a subir
            int mitad = (Orden / 2);

            llavePorSubir = Llaves[mitad];
            datoPorSubir  = Datos[mitad];
            Llaves[mitad] = "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%";

            // Llenar las llaves y datos que pasan al nuevo nodo
            int j = 0;

            for (int i = mitad + 1; i < Llaves.Count; i++)
            {
                nuevoNodo.Llaves[j] = Llaves[i];
                nuevoNodo.Datos[j]  = Datos[i];
                Llaves[i]           = "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%";
                j++;
            }

            // Llenar los hijos que pasan al nuevo nodo
            j = 0;
            for (int i = mitad + 1; i < Hijos.Count; i++)
            {
                nuevoNodo.Hijos[j] = Hijos[i];
                Hijos[i]           = Utilidades.ApuntadorVacio;
                j++;
            }
            Llaves.RemoveAt(Llaves.Count - 1);
            Datos.RemoveAt(Datos.Count - 1);
            Hijos.RemoveAt(Hijos.Count - 1);
        }
示例#9
0
        public override void GenerarHijos(bool EsTurnoPC)
        {
            char c = EsTurnoPC ? 'X' : 'O';

            for (int i = 0; i < Estado.Length; i++)
            {
                if (Estado[i] == ' ')
                {
                    if (Hijos == null)
                    {
                        Hijos = new List <Nodo>();
                    }
                    NodoDama n = new NodoDama();
                    n.Estado    = (char[])Estado.Clone();
                    n.Estado[i] = c;

                    Hijos.Add(n);
                }
            }
        }
        public List <TKey> hijosyvaloresActuales(TKey llaveAComparar, ref List <TData> datos, ref List <int> hijos)
        {
            int         condition = nodoLlaves.Count;
            List <TKey> Maximuns  = new List <TKey>();

            for (int i = 0; i < condition; i++)
            {
                if (nodoLlaves[i].CompareTo(llaveAComparar) == 1)
                {
                    Maximuns.Add(nodoLlaves[i]);
                    datos.Add(datosNodo[i]);
                    Hijos.Add(Hijos[i + 1]);
                    Hijos[i + 1] = Generador.hacerNulo();
                }
            }
            for (int i = 0; i < Maximuns.Count; i++)
            {
                nodoLlaves.Remove(Maximuns[i]);
                datosNodo.Remove(datos[i]);
            }
            return(Maximuns);
        }
        public void insertarGrupoDeHijos(List <int> grupoHijos, int inicio, int posicionDeInsercion)
        {
            inicio++;
            for (int i = 0; i < grupoHijos.Count; i++)
            {
                Hijos.Add(Generador.hacerNulo());
            }
            int temporal   = 0;
            int GroupCount = 0;

            for (int i = inicio; i < Hijos.Count - 1; i++)
            {
                temporal = Hijos[i];
                Hijos[i] = grupoHijos[GroupCount];
                grupoHijos[GroupCount] = temporal;
                if (GroupCount == grupoHijos.Count)
                {
                    GroupCount = 0;
                }
            }
            Hijos[Count - 1] = temporal;
            Hijos[inicio]    = posicionDeInsercion;
        }
        public List <TKey> HijosAndValuesToBrother(TKey llaveAComparar, ref List <TData> datos, ref List <int> hijos)
        {
            int         condicionPrincipal = nodoLlaves.Count;
            List <TKey> maximos            = new List <TKey>();

            for (int i = 0; i < condicionPrincipal; i++)
            {
                if (nodoLlaves[i].CompareTo(llaveAComparar) == 1)
                {
                    maximos.Add(nodoLlaves[i]);
                    datos.Add(datosNodo[i]);
                    Hijos.Add(Hijos[i]);
                    Hijos[i] = Generador.hacerNulo();
                }
            }
            Hijos.Add(Hijos[condicionPrincipal]);
            Hijos[condicionPrincipal] = Generador.hacerNulo();
            for (int i = 0; i < maximos.Count; i++)
            {
                nodoLlaves.Remove(maximos[i]);
                datosNodo.Remove(datos[i]);
            }
            return(maximos);
        }
示例#13
0
        internal void SeparacionNodo(T _data, int derecho, Nodo <T> Nodo, T SubirData, ICreateFixedSizeText <T> createFixedSizeText)
        {
            int medio = 0;

            if (Padre.Equals(MetodosNecesarios.NullPointer))
            {
                Data.Add(_data);
                Hijos.Add(MetodosNecesarios.NullPointer);

                InsertarDatos(_data, derecho, false);

                medio = Data.Count / 2;

                SubirData   = Data[medio];
                Data[medio] = createFixedSizeText.CreateNull();

                int j = 0;
                for (int i = medio + 1; i < Data.Count; i++)
                {
                    Nodo.Data[j] = Data[i];
                    Data[i]      = createFixedSizeText.CreateNull();
                    j++;
                }
                j = 0;
                for (int i = medio + 1; i < Hijos.Count; i++)
                {
                    Nodo.Hijos[j] = Hijos[i];
                    Hijos[j]      = MetodosNecesarios.NullPointer;
                    j++;
                }
                Data.RemoveAt(Data.Count - 1);
                Hijos.RemoveAt(Hijos.Count - 1);
            }
            else
            {
                Data.Add(_data);
                Hijos.Add(MetodosNecesarios.NullPointer);

                InsertarDatos(_data, derecho, false);

                medio = Data.Count / 2;

                SubirData   = Data[medio];
                Data[medio] = createFixedSizeText.CreateNull();

                int j = 0;
                for (int i = medio + 1; i < Hijos.Count; i++)
                {
                    Nodo.Data[j] = Data[i];
                    Data[i]      = createFixedSizeText.CreateNull();
                    j++;
                }

                j = 0;
                for (int i = medio + 1; i < Hijos.Count; i++)
                {
                    Nodo.Hijos[j] = Hijos[i];
                    Hijos[i]      = MetodosNecesarios.NullPointer;
                    j++;
                }
                Data.RemoveAt(Data.Count - 1);
                Hijos.RemoveAt(Hijos.Count - 1);
            }
        }