public static void Main(string[] args) { Console.WriteLine("Добро пожаловать в приложение по работе с двунаправленным списком!"); // Ввод количества элементов в двунаправленном списке Console.WriteLine("\nВведите количество элементов в списке"); uint size = Input(); // Создание двунаправленного списка BiList beg = BiList.MakeList(size); // Подсчет количества элементов Console.WriteLine("\nПодсчитаем количество элементов в списке с помощью двух разных функций"); // Подсчет элементов с помощью обычной функции и вывод результата int count = BiList.GetCount(beg); Console.WriteLine($"Количество элементов с помощью нерекурсивной функции равно {count}"); // Подсчет элементов с помощью рекурсивной функции и вывод результата int recount = BiList.GetCountRecurent(beg); Console.WriteLine($"Количество элементов с помощью рекурсивной функции равно {recount}"); Console.WriteLine("\nЗавершение работы в приложении по работе с двунаправленным списком"); Console.WriteLine("\nНажмите любую клавишу..."); Console.ReadKey(); }
public void TestMethod01() { uint size = 5; BiList biList = BiList.MakeList(size); int count = BiList.GetCount(biList); Assert.AreEqual(size, (uint)count); }
// Поиск количества элементов списка с рекурсией public static int GetCountRecurent(BiList elem) { BiList p = elem; if (p == null) { return(0); } return(GetCountRecurent(p.next) + 1); }
// Поиск количества элементов списка без рекурсии public static int GetCount(BiList beg) { int i = 0; BiList p = beg; while (p != null) { i++; p = p.next; } return(i); }
// Создание двунаправленного списка public static BiList MakeList(uint size) { Random random = new Random(); int d = random.Next(1, 100); BiList beg = MakePoint(d); for (int i = 1; i < size; i++) { d = random.Next(1, 100); BiList p = MakePoint(d); p.next = beg; beg.pred = p; beg = p; } return(beg); }
// Создание элемента списка private static BiList MakePoint(int d) { BiList p = new BiList(d); return(p); }
public BiList pred; // Предыдущий элемент public BiList(int d) { data = d; next = null; pred = null; }