Exemplo n.º 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);
        }
Exemplo n.º 2
0
        public Nodo RemoveEdge(int position)
        {
            Nodo edge = null;

            if (Hijos.Count > position)
            {
                edge        = Hijos[position];
                edge.Padres = null;
                Hijos.RemoveAt(position);
            }

            return(edge);
        }
Exemplo n.º 3
0
Arquivo: Nodo.cs Projeto: Jocagi/EDI
        public Nodo eliminarHijo(int posicion)
        {
            Nodo nodo = null;

            if (Hijos.Count > posicion)
            {
                nodo       = Hijos[posicion];
                nodo.Padre = null;
                Hijos.RemoveAt(posicion);
            }

            return(nodo);
        }
Exemplo n.º 4
0
        public Nodo EliminarHijo(int position)
        {
            Nodo Hijo = null;

            if (Hijos.Count > position)
            {
                Hijo       = Hijos[position];
                Hijo.Padre = null;
                Hijos.RemoveAt(position);
            }


            return(Hijo);
        }
Exemplo n.º 5
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);
        }
Exemplo n.º 6
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);
            }
        }