public static void Main(string[] args)
Console.WriteLine("Número de datos a ingresar: ");
int noEspaciosEnMemoria = int.Parse(Console.ReadLine());
int?[] espaciosEnMemoria = new int?[noEspaciosEnMemoria];
for (int i = 0; i < espaciosEnMemoria.Length; i++)
Console.WriteLine("Ingrese un número:");
int numeroIngresado = int.Parse(Console.ReadLine());
espaciosEnMemoria = InsertarDato(numeroIngresado, espaciosEnMemoria, null);
Console.WriteLine("\nDatos en Memoría: \n");
MostrarDatos(espaciosEnMemoria);
public static int?[] InsertarDato(int numeroIngresado, int?[] espaciosEnMemoria, int? indexColision, int count = 0)
if (indexColision.HasValue) count += 1;
int espacioATomar = Mod(numeroIngresado + count^2, espaciosEnMemoria.Length);
if (espaciosEnMemoria[espacioATomar].HasValue)
Console.WriteLine("Colisión en el indice: " + espacioATomar);
espaciosEnMemoria = InsertarDato(numeroIngresado, espaciosEnMemoria, espacioATomar, count);
Console.WriteLine("Dato insertado en indice: " + espacioATomar);
espaciosEnMemoria[espacioATomar] = numeroIngresado;
return espaciosEnMemoria;
public static void MostrarDatos(int?[] espaciosEnMemoria)
for (int i = 0; i < espaciosEnMemoria.Length; i++)
Console.WriteLine(string.Format("Espacio: {0} - Valor: {1}", i, espaciosEnMemoria[i]));
public static int Mod(int a, int n)
return a - (int)Math.Floor((double)a / n) * n;