Коротко о проекте #
Algorithms & Data Structures Labs — отдельный публичный репозиторий с лабораторными работами по алгоритмам и структурам данных. Это не одна маленькая задача, а серия самостоятельных C#/.NET консольных проектов, где базовые ADT реализованы вручную: без List<T>, Dictionary<TKey,TValue>, Stack<T>, Queue<T> и других готовых коллекций.
Конкретный репозиторий: github.com/pistaha/algorithms-data-structures-labs
Главная ветка используется как навигационная страница, а лабораторные разнесены по отдельным веткам. Такой формат оставляет каждую работу самостоятельной: у неё есть свой проект, README, исходный код и файл docs/task.txt с текстом задания.
Что показывает проект #
- умение проектировать абстрактные типы данных через публичный интерфейс и несколько внутренних представлений;
- понимание массивного хранения, ссылочных структур, курсорных позиций и ручного управления связями;
- реализацию стеков, очередей, списков, map/dictionary и hash table без стандартных коллекций;
- работу с коллизиями через separate chaining, closed hashing и linear probing;
- топологическую сортировку с проверкой невозможных порядков;
- моделирование связи многие-ко-многим через multilist и два кольцевых списка;
- аккуратную структуру консольных демо, чтобы поведение алгоритмов можно было проверить локально.
Лабораторные #
| Ветка | Тема | Что реализовано | Ссылка |
|---|---|---|---|
lab1 |
List ADT | Двусвязный список, cursor-based list, удаление дубликатов записей адресной книги | Открыть ветку |
lab2 |
Stack / Queue / Map ADT | Стек на массиве, связный стек, стек через список, очереди на массиве и кольцевой структуре, linked-list map | Открыть ветку |
lab3 |
Dictionary ADT | Словарь через открытое хеширование, закрытое хеширование и linear probing | Открыть ветку |
lab4 |
Partial Order / Topological Sort | Хранение частичного порядка, построение зависимостей, топологическая сортировка и обнаружение невозможного порядка | Открыть ветку |
lab5 |
Student-Course Multilist | Hash tables для студентов и курсов, регистрационные узлы, связь многие-ко-многим в двух направлениях | Открыть ветку |
Разбор по веткам #
lab1: List ADT
#
Первая лабораторная сравнивает две реализации одного абстрактного списка: двусвязный список и курсорную модель поверх массива. Демо-задача удаляет дубликаты записей адресной книги, а сами записи хранят поля как фиксированные char[].
Ключевые файлы:
algo 1/dvus.cs— двусвязный список;algo 1/curs.cs— cursor-based list;algo 1/AddressBookEntry.cs— запись адресной книги;algo 1/Program.cs— демонстрация удаления дубликатов.
lab2: Stack, Queue, List и Map
#
Вторая лабораторная расширяет набор ADT и показывает одну и ту же идею через разные стратегии хранения. Стек реализован через массив, связные узлы и собственный список. Очередь реализована через массив, кольцевую связную структуру и список. Дополнительно есть linked-list map с присваиванием, поиском и печатью пар ключ-значение.
Ключевые файлы:
algo2/Stack/ArrayStack/Stack.cs;algo2/Stack/LinkedStack/Stack.cs;algo2/Stack/ListStack/Stack.cs;algo2/Queue/ArrayQueue/Queue.cs;algo2/Queue/CircularQueue/Queue.cs;algo2/Queue/ListQueue/Queue.cs;algo2/Map/Map.cs.
lab3: Dictionary ADT и хеширование
#
Третья лабораторная посвящена словарю/множеству на хеш-таблицах. В проекте есть две реализации: open hashing с цепочками коллизий и closed hashing с линейным пробированием. Демо использует два множества goodguys и badguys, а команды меняют и проверяют статус имени.
Поддерживаемые команды демо:
F name— перенести имя в положительное множество;U name— перенести имя в отрицательное множество;? name— проверить статус;P— напечатать оба множества;E— выйти.
Ключевые файлы:
algo3/Open/Dict.cs;algo3/Closed/Dict.cs;algo3/DictUtils.cs;algo3/Program.cs.
lab4: частичный порядок и топологическая сортировка
#
Четвёртая лабораторная превращает частично упорядоченное множество в линейный порядок, если это возможно. Ограничения вида x < y хранятся как пары чисел, затем из них строится внутренняя структура зависимостей. Алгоритм выбирает элементы, которые можно поставить следующими, и отдельно обрабатывает случаи, где порядок построить нельзя.
Ключевые файлы:
algo4/PartialOrderSet.cs— хранение исходных пар;algo4/TopologicalSorter.cs— построение зависимостей и сортировка;algo4/Program.cs— демонстрационные сценарии.
lab5: multilist для студентов и курсов
#
Пятая лабораторная моделирует связь многие-ко-многим без базы данных и без коллекций. Студенты и курсы лежат в отдельных закрытых хеш-таблицах, а регистрация на курс представлена отдельным узлом. Один узел одновременно входит в два кольца: список курсов конкретного студента и список студентов конкретного курса.
Поддерживаемые операции:
- добавить студента на курс;
- удалить студента с конкретного курса;
- удалить студента со всех курсов;
- удалить всех студентов с курса;
- вывести всех студентов курса;
- вывести все курсы студента.
Ключевые файлы:
algo 5/StudentHashTable.cs;algo 5/CourseHashTable.cs;algo 5/StudentRecord.cs;algo 5/CourseRecord.cs;algo 5/RegistrationRecord.cs;algo 5/CourseRegistrationMultiList.cs;algo 5/NameTools.cs.
Инженерные детали #
Главная ценность репозитория в том, что структуры данных реализованы на низком уровне. В коде явно видны границы массивов, состояние Full / Empty, удаление узлов, переходы по ссылкам, обработка коллизий и поддержание согласованности двух связанных направлений в multilist. Это хороший контраст к проектам портфолио, где основной фокус на backend, frontend и инфраструктуре: здесь показана фундаментальная алгоритмическая база.
Стек #
- C#;
- .NET 8 / .NET 10;
- консольные приложения;
- ручные ADT без стандартных коллекций;
- Git-ветки как отдельные снимки лабораторных проектов.
Как запустить #
git clone https://github.com/pistaha/algorithms-data-structures-labs.git
cd algorithms-data-structures-labs
git switch lab1
dotnet run --project "algo 1/algo 1.csproj"
git switch lab3
dotnet run --project "algo3/algo3.csproj"
git switch lab5
dotnet run --project "algo 5/algo 5.csproj"Результат #
Репозиторий добавляет в портфолио отдельное направление по алгоритмам и структурам данных. Он показывает, что кроме прикладных full-stack и backend-проектов есть уверенная база по ADT, хешированию, графовым зависимостям и ручному моделированию связей в памяти.