Репозиторий с собственной реализацией стандартных структур данных C++ для лабораторных работ по предмету "Языки программирования".
Данный проект содержит реализации основных структур данных из стандартной библиотеки C++ (STL), написанные с нуля в учебных целях. Каждая структура данных реализована в отдельной директории с соответствующими заголовочными файлами, исходниками и примерами использования.
Директория: stack/
Реализация стека на основе динамического массива с автоматическим изменением размера.
Основные методы:
push(char x)- добавление элемента в стекpop()- удаление и возврат верхнего элементаtop()- получение верхнего элемента без удаленияisEmpty()- проверка на пустоту
Файлы:
- ststack.h - заголовочный файл
- ststack.cpp - реализация
- main.cpp - пример использования
Директория: queue/
Шаблонная реализация очереди на основе двусвязного списка (FIFO - First In First Out).
Основные методы:
push(T data)- добавление элемента в конец очередиpop()- удаление элемента из начала очередиfront()- получение первого элементаlast()- получение последнего элементаgetSize()- получение размера очередиisEmpty()- проверка на пустотуclear()- очистка очередиdisplay()- вывод содержимого очереди
Файлы:
Директория: deque/
Шаблонная реализация двусторонней очереди на основе двусвязного списка с возможностью добавления и удаления элементов с обоих концов.
Основные методы:
pushfront(T data)- добавление элемента в началоpushback(T data)- добавление элемента в конецpopfront()- удаление элемента из началаpopback()- удаление элемента из концаfront()- получение первого элементаlast()- получение последнего элементаgetSize()- получение размераisEmpty()- проверка на пустотуclear()- очистка дека
Файлы:
Директория: list/
Шаблонная реализация двусвязного списка с расширенным функционалом для работы с элементами.
Основные методы:
pushfront(T data)- добавление элемента в началоpushback(T data)- добавление элемента в конецpopfront()- удаление первого элементаpopback()- удаление последнего элементаinsert(int index, T data)- вставка элемента по индексуremoveAt(int index)- удаление элемента по индексуgetAt(int index)- получение элемента по индексуoperator[](int index)- доступ к элементу через оператор []front()- получение первого элементаlast()- получение последнего элементаfind(T data)- поиск индекса элементаis_in(T data)- проверка наличия элементаgetSize()- получение размера спискаisEmpty()- проверка на пустотуclear()- очистка спискаdisplay()- вывод содержимого списка
Файлы:
Structures/
├── stack/ # Реализация стека
├── queue/ # Реализация очереди
├── deque/ # Реализация двусторонней очереди
├── list/ # Реализация двусвязного списка
└── README.md # Этот файл
Каждая структура данных содержит собственный файл main.cpp для демонстрации работы. Для компиляции можно использовать любой C++ компилятор:
# Stack
g++ stack/main.cpp stack/ststack.cpp -o stack_demo
# Queue
g++ queue/main.cpp queue/queue.cpp -o queue_demo
# Deque
g++ deque/main.cpp deque/deque.cpp -o deque_demo
# List
g++ list/main.cpp list/list.cpp -o list_demoНекоторые структуры данных содержат файлы проектов Visual Studio (.vcxproj), которые можно открыть напрямую в IDE.
- Шаблоны (Templates): Queue, Deque и List реализованы как шаблонные классы для поддержки различных типов данных
- Двусвязные списки: Queue, Deque и List используют внутренний класс Node для организации двусвязного списка
- Динамическое управление памятью: все структуры корректно управляют памятью с использованием конструкторов и деструкторов
- Stack: использует динамический массив с автоматическим изменением размера при переполнении