↓ Перейти к основному содержимому

Algorithms & Data Structures Labs — лабораторные по структурам данных

Коротко о проекте
#

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, хешированию, графовым зависимостям и ручному моделированию связей в памяти.