public static PointBiList AddPoint(PointBiList beg, int number) { Animals a = new Animals(); a = a.CreateObjectAnimalsRandom(); Console.WriteLine("\nЭлемент {0} добавляется ...", a.ToString()); // создаем новый элемент PointBiList NewPoint = MakePoint((Animals)a.Clone()); if (beg == null) // список пустой { beg = MakePoint((Animals)a.Clone()); return(beg); } if (number == 1) //добавление в начало списка { beg.pred = NewPoint; NewPoint.next = beg; beg = NewPoint; return(beg); } // вспом. переменная для прохода по списку PointBiList p = beg; // идем по списку до нужного элемента for (int i = 1; i < number - 1 && p != null; i++) { p = p.next; } // добавляем новый элемент NewPoint.pred = p; NewPoint.next = p.next; p.next = NewPoint; return(beg); }
public static PointBiList AddOddObjects(PointBiList beg) { int size = GetCount(beg) * 2; for (int i = 0; i <= size; i += 2) { beg = AddPoint(beg, i + 1); } return(beg); }
public static int GetCount(PointBiList beg) { int i = 0; PointBiList p = beg; while (p != null) { i++; p = p.next; // переход к следующему элементу } return(i); }
static void Main(string[] args) { PointUniList uniListBeg = null; PointBiList biListBeg = null; PointTree pointTree = null; Tree <Animals> tree = null; Console.WriteLine("Добро пожаловать в приложение по работе с коллекциями!"); while (true) { int pointsMainMenu = 4; Console.WriteLine("\nМеню приложения:"); Console.WriteLine("1 - Меню работы с однонаправленным списком"); Console.WriteLine("2 - Меню работы с двунаправленным списком"); Console.WriteLine("3 - Меню работы с идеально сбалансированным деревом"); Console.WriteLine("4 - Меню работы с обобщенной коллекцией"); Console.WriteLine("0 - Выйти из приложения"); int choiceMainMenu = InputInt(0, pointsMainMenu); if (choiceMainMenu == 0) { Console.WriteLine("\n0 - Выход из приложения"); break; } switch (choiceMainMenu) { case 1: UniCaseMenu(ref uniListBeg); break; case 2: BiCaseMenu(ref biListBeg); break; case 3: TreeCaseMenu(ref pointTree); break; case 4: PointTreeCaseMenu(ref tree); break; } } }
public static void ShowList(PointBiList beg) { // проверка наличия элементов в списке if (beg == null) { Console.WriteLine("\nСписок пустой"); return; } PointBiList p = beg; Console.WriteLine("\nСписок:"); while (p != null) { Console.WriteLine(p.ToString()); p = p.next; // переход к следующему элементу } }
// формирование двунаправленного списка public static PointBiList MakeList(int size) //добавление в начало { Animals a = new Animals(); a = a.CreateObjectAnimalsRandom(); Console.WriteLine("Элемент {0} добавляется ...", a.ToString()); PointBiList beg = MakePoint((Animals)a.Clone()); for (int i = 1; i < size; i++) { a = a.CreateObjectAnimalsRandom(); Console.WriteLine("Элемент {0} добавляется ...", a.ToString()); PointBiList p = MakePoint((Animals)a.Clone()); p.next = beg; beg.pred = p; beg = p; } return(beg); }
public static PointBiList DelElement(PointBiList beg, int number) { if (number == 1) // удаляем первый элемент { beg = beg.next; if (beg != null) { beg.pred = null; } return(beg); } PointBiList p = beg; // ищем элемент для удаления и встаем на предыдущий for (int i = 1; i < number - 1 && p != null; i++) { p = p.next; } // исключаем элемент из списка p.next = p.next.next; p.next.pred = p; return(beg); }
private static void BiCaseMenu(ref PointBiList beg) { while (true) { int pointsCaseMenu = 7; Console.WriteLine("\nМеню работы с двунаправленным списком"); Console.WriteLine("1 - Формирование двунаправленного списка"); Console.WriteLine("2 - Добавление элемента в список"); Console.WriteLine("3 - Удаление элемента из списка"); Console.WriteLine("4 - Печать списка"); Console.WriteLine("5 - Добавление в список элементов с номерами 1, 3, 5 и т.д."); Console.WriteLine("6 - Удаление списка из памяти"); Console.WriteLine("7 - Очистка истории"); Console.WriteLine("0 - Выход из меню"); int choiceCaseMenu = InputInt(0, pointsCaseMenu); if (choiceCaseMenu == 0) { Console.WriteLine("\n0 - Выход из меню"); break; } switch (choiceCaseMenu) { case 1: { Console.WriteLine("\n1 - Формирование двунаправленного списка"); Console.WriteLine("Введите количество объектов для формирования списка:"); int number = InputInt(1, PointBiList.maxCount); Console.WriteLine("Список:"); beg = PointBiList.MakeList(number); Console.WriteLine("Формирование двунаправленного списка завершено"); } break; case 2: { Console.WriteLine("\n2 - Добавление элемента в список"); if (PointBiList.GetCount(beg) >= PointBiList.maxCount) { Console.WriteLine("Ошибка! Список имеет не меньше 100 элементов"); Console.WriteLine("Добавление элемента в список не завершено"); break; } Console.WriteLine("Введите номер добавления объекта в список:"); int number = InputInt(1, PointBiList.GetCount(beg) + 1); beg = PointBiList.AddPoint(beg, number); Console.WriteLine("Добавление элемента в список завершено"); } break; case 3: { Console.WriteLine("\n3 - Удаление элемента из списка"); if (beg == null) // пустой список { Console.WriteLine("Ошибка! Список пустой"); Console.WriteLine("Удаление элемента из списка не завершено"); break; } Console.WriteLine("Введите номер удаления элемента из списка:"); int number = InputInt(1, PointBiList.GetCount(beg)); beg = PointBiList.DelElement(beg, number); Console.WriteLine("Удаление элемента из списка завершено"); } break; case 4: { Console.WriteLine("\n4 - Печать списка"); PointBiList.ShowList(beg); Console.WriteLine("Печать списка завершена"); } break; case 5: { Console.WriteLine("\n5 - Добавление в список элементов с номерами 1, 3, 5 и т.д."); if (PointBiList.GetCount(beg) >= PointBiList.maxCount) { Console.WriteLine("Ошибка! Список имеет не меньше 100 элементов"); Console.WriteLine("Добавление в список элементов с номерами 1, 3, 5 и т.д. не завершено"); break; } beg = PointBiList.AddOddObjects(beg); Console.WriteLine("Добавление в список элементов с номерами 1, 3, 5 и т.д. завершено"); } break; case 6: { Console.WriteLine("\n6 - Удаление списка из памяти"); beg = null; Console.WriteLine("Удаление списка из памяти завершено"); } break; case 7: { Console.Clear(); Console.WriteLine("История была очищена"); } break; } } }
// создание элемента списка static PointBiList MakePoint(Animals a) { PointBiList p = new PointBiList(a); return(p); }
public PointBiList(Animals a) { animal = a; next = null; pred = null; }
public PointBiList pred; // адрес предыдущего элемента public PointBiList() { animal = new Animals(); next = null; pred = null; }