Skip to content

IAmBornedHope/Lab_2_3

Repository files navigation

Лабораторная работа №2 (Полиморфные абстрактные типы данных)

Лабораторная работа заключается в написании на языке C++ системы для линейной организации данных с помощью динамического массива, связанного списка и последовательности (АТД последовательность предоставляет унифицированный доступ к двум другим)


Требования

  • С++20 и выше (Использование концептов при реализации BitSequence)
  • GoogleTest (Тестирование программы)
  • wxWidgets (Реализация графического интерфейса)
  • СMake (Опционально, для сборки)

Структуры данных

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

Структура Описание
DynamicArray<T> Динамический массив
LinkedList<T> Двусвязный список

Последовательность (Sequence<T> - единый интерфейс)

Структура Описание
ArraySequence<T> Реализация последовательности на основе динамического массива
ListSequence<T> Реализация последовательности на основе двусвязного списка
BitSequence Специализация для работы с битовой последовательностью

Основные операции для последовательностей

Сигнатура Описание работы метода Примечание
<...>Sequence() Конструктор по умолчанию
<...>Sequence(T* items, size_t count) Конструктор из массива
<...>Sequence(const <...>Sequence<T>& sequence) Копирующий конструктор
T get_first() const Получить первый элемент последовательности Может выбрасывать исключение, если последовательность пуста
T get_last() const Получить последний элемент последовательности Может выбрасывать исключение, если последовательность пуста
T get(size_t index) const Получить элемент по индексу Может выбрасывать исключение, если индекс некорректен
size_t get_length() const Получить длину последовательности
Sequence<T>* get_subsequence(size_t start_index, size_t end_index) Получить подпоследовательность по индексам Может выбрасывать исключения, если start_index > end_index или индексы некорректны
Sequence<T>* append(T temp) Добавить элемент в конец последовательности
Sequence<T>* prepend(T temp) Добавить элемент в начало последовательности
Sequence<T>* insert_at(T temp, size_t index) Добавить элемент по индексу Может выбрасывать исключение, если индекс некорректен
Sequence<T>* concat(Sequence<T>* sequence) const Конкатенация последовательностей Всегда возвращает новую последовательность
void clear() Очистка Sequence

Графический интерфейс

Графический интерфейс реализован на основе библиотеки wxWidgets На актуальный момент он предоставляет возможность работы с 4 объектами класса Sequence (2 ListSequence, 2 ArraySequence) Доступные операции:

  • Вставка в конец
  • Вставка в начало
  • Вставка по индексу
  • Получение длины последовательности
  • Получение элемента по индексу
  • Очистка последовательности
  • Конкатенация (активная + целевая)
  • Получение подпоследовательности Две последние операции создают временный объект в поле вывода

Тестирование

В лабораторной работе реализовано модульное тестирование функционала библиотеки при помощи Google Test На данный момент протестированы

  • DynamicArray
  • LinkedList
  • ArraySequence
  • ListSequence
  • BitSequence Суммарно написан 121 тест

Сборка проекта и запуск

Проект собирается модульно при помощи CMake
Модули тестирования и графического интерфейса собираются отдельно

About

Laboratory work #3 (2 semester)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors