//функция для перехода к концу списка public void reverseEnd() { while (hash.Next != null) { hash = hash.Next; } }
//функция для перехода к началу списка public void reverseBegin() { while (hash.Back != null) { hash = hash.Back; } if (hash.Back != null && hash.Next != null) { hash = hash.Next; } }
//метод поиска по ключу public HashList searchKey(string key) { /* Этот метод волшебный, и он * гарантированно возвращает целый список * И при вызове метода * нужно всего лишь проверить совпадают ли ключи */ reverseBegin(); while (hash.Next != null) { if (hash.key == key) { return(hash); } hash = hash.Next; } return(hash); }
//метод удаления элемента из списка public void delete(string key) { /* Если элемент списка не является последним * то вырезаем его путём создания буферной переменной * иначе просто удаляем ссылки на этот последний элемент */ searchKey(key); if (hash.Next != null && hash.Back != null) { HashList local = hash.Next; local.Back = hash.Back; hash.Back.Next = local; hash = local; } else if (hash.Next == null) { hash.Back.Next = null; } }
//функция добавление нового слова public void add(string key, string text) { /* Уходим в начало списка. * Если при проверочном поиске нашли ключ то делаем перезапись. * Иначе переходим в конец списка. * И производим запись. */ reverseBegin(); if (searchKey(key).key == key) { hash.key = key; hash.text = text; } else { reverseEnd(); HashList local = new HashList(key, text); local.Back = hash; hash.Next = local; hash = local; } }
static void Main(string[] args) { int n = 0; bool flag = false; while (!flag) { try { Console.Write("Введите размер хеш таблицы:"); n = Math.Abs(Convert.ToInt32(Console.ReadLine())); flag = true; } catch { Console.WriteLine("Не верный ввод. Повторите попытку."); flag = false; } } MyList[] table = new MyList[n]; for (int i = 0; i < table.Length; i++) { table[i] = new MyList(); } command(); while (true) { Console.Write("Введите команду:"); string consoleCommand = Convert.ToString(Console.ReadLine()); if (consoleCommand == "поиск") { Console.Write("Введите ключевое слово для поиска:"); string key = Convert.ToString(Console.ReadLine()); HashList item = table[hashGeneration(key, n)].searchKey(key); if (item.key == key) { Console.WriteLine("key:" + item.key); Console.WriteLine("text:" + item.text); } else { Console.WriteLine("По запросу ничего не найдено."); } } else if (consoleCommand == "вставка") { Console.Write("Введите ключевое слово для записи:"); string key = Convert.ToString(Console.ReadLine()); Console.Write("Введите сопроводительный текст:"); string text = Convert.ToString(Console.ReadLine()); table[hashGeneration(key, n)].add(key, text); Console.WriteLine("Запись выполнена успешно."); } else if (consoleCommand == "удаление") { Console.Write("Введите ключевое слово для удаления:"); string key = Convert.ToString(Console.ReadLine()); MyList ho = new MyList(); try { table[hashGeneration(key, n)].delete(key); Console.WriteLine("Удаление выполнено успешно."); } catch { Console.WriteLine("Данный ключ не существует."); } } else if (consoleCommand == "выход") { break; } else { Console.WriteLine("не верная команда. Повторите ввод."); } } Console.Write("нажмите любую кнопку для закрытия..."); Console.ReadKey(); }
public MyList() { hash = new HashList(); }