Skip to content

Instantly share code, notes, and snippets.

@NickTikhomirov
Last active May 21, 2019 21:21
Show Gist options
  • Save NickTikhomirov/aa57980ee9b4318896e1460a015d2386 to your computer and use it in GitHub Desktop.
Save NickTikhomirov/aa57980ee9b4318896e1460a015d2386 to your computer and use it in GitHub Desktop.
Домашнее задание по ТиМП

Домашний рубежный контроль по ТиМП

Выполнено студентом группы ИУ8-23 Тихомировым Никитой

Задача: найти на GitHub репозитории с кодом, соответствующим таким структурам данных как

  • Дерево
  • Очередь
  • Список
  • Множество

Для каждого из них найти основные действия (перечислены на лекциях).

Решение: Были найдены три проекта, удовлетворяющие условию задания, первый реализует первые три структуры, а ещё два - последнюю. Два репозитория представлены для языка C++, один - для языка Go. Приведены ссылки на проекты, заголовочные файлы и файлы реализации. Стоит отметить, что все проекты реализуют "структуры ради структур" - то есть являются скорее библиотеками, чем решениями каких-то прикладных задач. Причина такого выбора примеров - более качественная реализация (структура реализуется программистом лучше, если её реализация и является основной задачей), простота нахождения мной на GitHub, лаконичность проектов, а также гарантия того, что структура будет реализована - то есть не будет взята какая-нибудь другая библиотека или вообще класс из встроенной библиотеки.

Дерево

Функционал дерева ограничивается добавлением элементов и проверкой значения на существование поэтому некоторые основные методы дерева носят статус доступа private. Но, тем не менее, это всё ещё дерево.

Проект:

https://github.com/mandliya/algorithms_and_data_structures

Заголовочный файл:

https://github.com/mandliya/algorithms_and_data_structures/blob/master/include/binarySearchTree.h

Строка 45 - Получение корня.
Строка 39 - Обнуление дерева.
Строка 41 - Добавление элемента.
Строка 12 и 13 - Левый и Правый сын.
Строка 11 - Значение узла.

(метод получения значения для сыновей и значения узла в данном примере не используется, есть только сами поля)

.cpp-файл:

https://github.com/mandliya/algorithms_and_data_structures/blob/master/include/impl/binarySearchTree.impl.h

Строка 145 - Получение корня.
Строка 104 - Обнуление дерева.
Строка 118 - Добавление элемента.

Очередь

Нормальная человеческая очередь, первый пришёл - первый ушёл. Только вот разделения на файлы нет, всё в одном делается. Также, внезапно, обнуления не добавили.

Проект:

(Тот же самый)

Файл:

https://github.com/mandliya/algorithms_and_data_structures/blob/master/include/queue.h

Строка 52 - Удаление элемента.
Строка 67 - Вставка элемента.
Строка 85 - Элемент в голове.

Очередь

Нормальная человеческая очередь, первый пришёл - первый ушёл. Только вот разделения на файлы нет, всё в одном делается. Также, внезапно, обнуления не добавили.

Проект:

(Тот же самый)

Файл:

https://github.com/mandliya/algorithms_and_data_structures/blob/master/include/queue.h

Строка 52 - Удаление элемента.
Строка 67 - Вставка элемента.
Строка 85 - Элемент в голове.

Список

Двусвязный список, который умеет выталкивать и добавлять элементы и с головы, и с хвоста. Можно делать стэк, можно делать очередь. Снова всё в одном файле.

Проект:

(Тот же самый)

Файл:

https://github.com/mandliya/algorithms_and_data_structures/blob/master/include/list.h

Строка 239 и 249 - Вставка элемента.
Строка 259 и 264 - Удаление элемента.
Строка 213 - Очистка списка.
Строка 202 - Размер списка.
Строка 106 - Получение следующего (перегрузка инкремента для итерратора).

Множество

Нормального множества(со всеми перечисленными операциями) я не нашёл, но нашёл два наполовину нормальных. Первое - множество с перегруженными математическими операциями, всё реализовано в одном файле. Второе - множество со всеми остальными операциями (на языке Go) (математические также реализованы, но мне не понравилось)

Проект1:

https://github.com/karatach1998

Файл1:

https://github.com/karatach1998/SetLib/blob/master/SetLib/SetOrderedArray.h

Строки 93-96 - Математические операции пересечения, объединения, разности и симметрической разности.
Строка 108 - Добавление элемента в множество

Проект2:

https://github.com/fatih/set

Файл2:

Объявление:https://github.com/fatih/set/blob/master/set.go

Строка 28 и 29 - Добавление и удаление
Строка 31 - Проверка на наличие
Строка 33 - Обнуление
Строка 42 - Слияние

Реализация: https://github.com/fatih/set/blob/master/set_nots.go

Строка 31 - Добавление
Строка 43 - Удаление
Строка 65 - Проверка на наличие
Строка 86 - Обнуление
Строка 42 - Слияние
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment