Функция для определения четности целого числа лежит в модуле question_1.py, там же объясняются её особенности.
Два класса, реализующих циклический буфер FIFO, лежат в модулях question_2_class_1.py и question_2_class_2.py.
В классе EpicCircularQueueOne за основу взят простой список и два указателя (голова и хвост), которые перемещаются по списку, добавляя или удаляя элементы (с учётом закруглённости циклического буфера, конечно). Это более простой вариант, который потребляет меньше памяти.
В классе EpicCircularQueueTwo я решил взять за основу связный список, в котором указатель "next" последнего узла ссылается на первый, а два указателя отвечают за добавление или удаление данных. Это более затратный в плане памяти вариант, потому что для каждого узла создаётся отдельный объект. С другой стороны, связный список - более гибкая структура данных, так что если бы потребовалось на ходу изменить размер буфера, то со связным списком это сделать проще.
Оба класса имеют публичные методы:
- check_if_full - определяет, полон ли буфер (возвращает True/False).
- check_if_empty - определяет, пуст ли буфер (возвращает True/False).
- list_values - возвращает список всех значений.
- add_value - добавляет значение в буфер (ничего не возвращает).
- headpop_value - удаляет самое раннее значение и возвращает его.
В модуле question_3.py находится класс MergeSort, который реализует сортировку списка методом сортировки слиянием. Это эффективный алгоритм со сложностью O(n log(n)), что для алгоритмов сортировки очень хорошо, потому что у многих асимптотическая сложность выше.