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); }
public Nodo RemoveEdge(int position) { Nodo edge = null; if (Hijos.Count > position) { edge = Hijos[position]; edge.Padres = null; Hijos.RemoveAt(position); } return(edge); }
public Nodo eliminarHijo(int posicion) { Nodo nodo = null; if (Hijos.Count > posicion) { nodo = Hijos[posicion]; nodo.Padre = null; Hijos.RemoveAt(posicion); } return(nodo); }
public Nodo EliminarHijo(int position) { Nodo Hijo = null; if (Hijos.Count > position) { Hijo = Hijos[position]; Hijo.Padre = null; Hijos.RemoveAt(position); } return(Hijo); }
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); }
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); } }