Поиск элемента
Проверяется, пуст ли список. Если пуст, возвращается -1. Создается переменная current, которая начинается с головы списка, и переменная index со значением 0. В цикле do-while перебираются элементы списка. Для каждого элемента проверяется, совпадает ли его значение с искомым. Если элемент найден, возвращается его индекс. Если после полного обхода элемент не найден, возвращается.
На рисунке 1.7 представлен метод фрагментом из кода.
Рисунок 1.7 - Поиск заданного элемента
Сортировка списка
Проверяется, пуст ли список или состоит из одного элемента. Если да, метод завершается. Используется алгоритм пузырьковой сортировки. Во внешнем цикле do-while выполняется до тех пор, пока на очередном проходе были обмены. Во внутреннем цикле do-while перебираются соседние элементы списка. Если текущий элемент больше следующего, их значения меняются местами. Флаг swapped устанавливается в true, indicating что нужен еще один проход. Процесс продолжается до полной сортировки списка. На рисунке 1.8 представлен метод фрагментом из кода.
Рисунок 1.8 - Сортировка списка
Поиск элемента по индексу
Создаётся индексная переменная index для проверки позиции. Если
индекс меньше нуля, метод сразу возвращает null, так как индекс вне допустимого диапазона. Инициализируется указатель current, который начинает с головы списка head — это первый элемент списка. В цикле while последовательно проходим по каждому узлу списка, переходя к следующему узлу через current.Next. На каждой итерации увеличивается счётчик текущего индекса currentIndex. Когда счётчик currentIndex совпадает с заданным индексом, возвращается значение текущего элемента current.Data. Если обход списка закончился (current стал равен null), а заданный индекс не найден, возвращается null. Таким образом реализован постепенный последовательный поиск элемента по его позиции в односвязном списке — так как односвязный список не имеет прямого доступа по индексу, приходится проходить от начала к нужному элементу.
Рисунок 1.9 – Метод поиска элемента по индексу
Слияние списка
Создается новый пустой список result для хранения результата. Проверяется, не пуст ли каждый из исходных списков. Если один из списков пуст, возвращается копия другого списка. Данные из обоих циклических списков копируются в массивы. Оба массива сортируются. Затем используется алгоритм "двух указателей" для слияния отсортированных массивов в один. Оставшиеся элементы из более длинного массива добавляются в конец. Возвращается новый список, содержащий все элементы из обоих исходных списков в отсортированном порядке.
На рисунках 1.10 и 1.11 представлен метод фрагментом из кода.
Рисунок 1.10 – Начало метода слияния списков
Рисунок 1.11 – Конец метода слияния списков
Заключение
В процессе выполнения практической работы были освоены навыки работы с динамическим списком, реализованы методы. А также, в соответствии со своим вариантом, дополнительно реализовано объединение двух динамических списка в один упорядоченный на языке программирования C#.
