예제 #1
0
        static void Main(string[] args)
        {
            Console.ForegroundColor = ConsoleColor.Green;
            Console.Title           = "Хэш таблицы.html";
            //создается массив элементов размерности N = 56
            int NumberElements = 56;
            var array          = new int[NumberElements];
            var rnd            = new Random();

            //генерируются ключи размерности m = 5
            Console.WriteLine("Сгенерированные ключи:");
            for (int i = 0; i < array.Length; i++)
            {
                array[i] = rnd.Next(10000, 100000);
            }
            OutArray(array, 1);


            int sizeTable = (int)Math.Round(NumberElements * 1.5);
            var hashTable = new MyHashTable(sizeTable, true);

            //var hashTable = new MyHashTable(sizeTable);

            Console.WriteLine();
            Console.WriteLine();

            //добавляем ключи в хэш таблицу
            for (int i = 0; i < array.Length; i++)
            {
                hashTable.Add(array[i]);
            }

            Console.WriteLine();

            Console.WriteLine("Коэффициент заполнения таблицы = {0:0.000}", hashTable.CoefOccupancy);
            Console.WriteLine("Среднее число проб = {0:0.000}", hashTable.AverageCountAttempt);

            Console.WriteLine();



            while (true)
            {
                Console.WriteLine("Хэш-таблица:");
                hashTable.PrintTable();
                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.WriteLine("Интерактивный режим");
                Console.WriteLine("1.Добавить ключ");
                Console.WriteLine("2.Найти индекс по ключу");
                Console.WriteLine("3.Удалить ключ");
                Console.WriteLine("4.Заменить один ключ другим");
                Console.WriteLine("5.Вывести параметры");
                Console.WriteLine("0.Выход");
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine();
                Console.Write("Выбор режима: ");
                var    mode = Console.ReadLine();
                int    key1, key2;
                string str;
                switch (mode[0])
                {
                case '1':
                    Console.WriteLine("1.Свой ключ");
                    Console.WriteLine("2.Диапазон случайных");
                    Console.WriteLine();
                    Console.Write("Выбор режима: ");
                    mode = Console.ReadLine();
                    switch (mode[0])
                    {
                    case '1':
                        Console.WriteLine();
                        Console.Write("Введите ключ = ");
                        str = Console.ReadLine();
                        if (!int.TryParse(str, out key1))
                        {
                            break;
                        }
                        if (hashTable.Add(key1))
                        {
                            NumberElements++;
                        }
                        Console.WriteLine("Нажмите любую клавишу, чтобы продолжить");
                        Console.ReadKey();
                        break;

                    case '2':
                        Console.WriteLine();
                        Console.Write("Сколько ключей = ");
                        str = Console.ReadLine();
                        if (!int.TryParse(str, out key1) || key1 < 0)
                        {
                            break;
                        }
                        var rand = new Random();
                        for (int i = 0; i < key1; i++)
                        {
                            if (hashTable.Add(rand.Next(10000, 99999)))
                            {
                                NumberElements++;
                            }
                        }
                        Console.WriteLine("Нажмите любую клавишу, чтобы продолжить");
                        Console.ReadKey();
                        break;
                    }

                    break;

                case '2':
                    Console.WriteLine();
                    Console.Write("Введите ключ = ");
                    str = Console.ReadLine();
                    if (!int.TryParse(str, out key1))
                    {
                        break;
                    }
                    hashTable.Find(key1);
                    Console.WriteLine("Нажмите любую клавишу, чтобы продолжить");
                    Console.ReadKey();
                    break;

                case '3':
                    Console.Write("Введите ключ = ");
                    str = Console.ReadLine();
                    if (!int.TryParse(str, out key1))
                    {
                        break;
                    }
                    if (hashTable.Remove(key1))
                    {
                        NumberElements--;
                    }
                    Console.WriteLine("Нажмите любую клавишу, чтобы продолжить");
                    Console.ReadKey();
                    break;

                case '4':
                    Console.WriteLine();
                    Console.Write("Введите ключ для замены = ");
                    str = Console.ReadLine();
                    if (!int.TryParse(str, out key1))
                    {
                        break;
                    }
                    Console.Write("Введите ключ чем заменить = ");
                    str = Console.ReadLine();
                    if (!int.TryParse(str, out key2))
                    {
                        break;
                    }
                    hashTable.Replace(key1, key2);
                    Console.WriteLine("Нажмите любую клавишу, чтобы продолжить");
                    Console.ReadKey();
                    break;

                case '5':
                    Console.WriteLine();
                    Console.WriteLine("Коэффициент заполнения таблицы = {0:0.000}", hashTable.CoefOccupancy);
                    Console.WriteLine("Среднее число проб = {0:0.000}", hashTable.AverageCountAttempt);
                    Console.WriteLine("Нажмите любую клавишу, чтобы продолжить");
                    Console.ReadKey();
                    break;

                case '0':
                    return;

                default:
                    break;
                }
            }
        }