/// <summary> /// Удаляет из списка элемент с заданным значением. /// </summary> /// <param name="number">Значение элемента.</param> public El Remove(int number) { El searchEl = Search(number), predEl = this; if (searchEl == this) { while (predEl.next != this) { predEl = predEl.next; } predEl.next = next; Console.WriteLine("\nЭлемент " + searchEl + " успешно удалён.\n\nИзменённый список:"); next.Print(); return(next); } while (predEl.next != searchEl) { predEl = predEl.next; } predEl.next = searchEl.next; Console.WriteLine("\nЭлемент " + searchEl + " успешно удалён.\n\nИзменённый список:"); Print(); return(this); }
/// <summary> /// Создаёт новый списк заданного размера. /// </summary> /// <param name="capacity">Размер списка.</param> /// <returns></returns> public static El MakeList(int capacity) { int number = 1; El el = new El(number); while (number < capacity) { el.Add(++number); } return(el); }
/// <summary> /// Добавляет элемент в список. /// </summary> /// <param name="number">Значение элемента.</param> private void Add(int number) { El newEl = new El(number), el = this; while (el.next != this) { el = el.next; } newEl.next = el.next; el.next = newEl; }
/// <summary> /// Печатает список. /// </summary> public void Print() { El el = this; Console.Write(el.ToString() + " "); while (el.next != this) { el = el.next; Console.Write(el.ToString() + " "); } Console.WriteLine(); }
/// <summary> /// Ищет в списке элемент с заданным значением. /// </summary> /// <param name="number">Значение элемента.</param> /// <returns></returns> public El Search(int number) { El el = this; while (el.number != number) { el = el.next; if (el == this) { throw new NullReferenceException("Элемент не найден."); } } return(el); }
/// <summary> /// Конструктор элемента. /// </summary> /// <param name="number">Значение элемента.</param> private El(int number) { this.number = number; next = this; }
static void Main(string[] args) { while (status) { switch (mainMenu.Show()) { case ConsoleKey.NumPad1: case ConsoleKey.D1: Console.Clear(); List = El.MakeList(Get.Int32("Введите количество элементов в списке: ")); break; case ConsoleKey.NumPad2: case ConsoleKey.D2: Console.Clear(); if (List != null) { try { List = List.Remove(Get.Int32("Введите удаляемый элемент: ")); } catch (NullReferenceException error) { Console.WriteLine('\n' + error.Message + '\n'); } } else { Console.WriteLine("Список не создан."); } Get.Wait(); break; case ConsoleKey.NumPad3: case ConsoleKey.D3: Console.Clear(); if (List != null) { try { El findEl = List.Search(Get.Int32("Введите искомый элемент: ")); Console.WriteLine("Элемент " + findEl + " найден.\n"); } catch (NullReferenceException error) { Console.WriteLine('\n' + error.Message + '\n'); } } else { Console.WriteLine("Список не создан."); } Get.Wait(); break; case ConsoleKey.NumPad4: case ConsoleKey.D4: Console.Clear(); if (List != null) { List.Print(); } else { Console.WriteLine("Списко не создан.\n"); } Get.Wait(); break; case ConsoleKey.Escape: status = false; break; default: Console.Clear(); Console.WriteLine("Выбран несуществующий пункт меню."); Get.Wait(); break; } } }