Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практики / ПР3 / СД_П3.odt
Скачиваний:
0
Добавлен:
27.06.2025
Размер:
321.42 Кб
Скачать

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра безопасности информационных систем (БИС)

СПИСКИ

Отчет по практической работе №3

по дисциплине «Структуры данных»

Студент гр. 733-1

_______ Сметанников Д.Е

_______

Принял:

преподаватель КИБЭВС

_______ Д.Р. Уразаев

_______

Задание

Реализовать динамический список при помощи двух классов. Класс node - отвечает за узел элемента списка, класс List - за работу со списком. Реализовать интерфейсную часть - методы:

  • инициализация пустого списка   - делаем это в конструкторе, если используются классы. 

  • добавление элементов списка в конец bool add (int element)

  • удаление заданного элемента из списка bool remove_item (int element ), где int element - удаляемый элемент, метод возвращает true если удаление элемента прошло успешно. 

  • Очистка списка -- bool clear(), возвращает true при успешной очистке, false в противоположном случае

  • поиск элемента списка по образцу

Вариант 3. Реализуемый список должен быть циклическим. Дополнительно реализовать методы: удалить из списка четные элементы. Удалить из списка повторяющиеся элементы.

Содержание

Задание 2

1 Введение 4

2 Ход работы 5

Заключение 13

Приложение А 14

  1. Введение

Целью данного задания является создание простого динамического циклического списока с использованием двух классов. Реализация базовых операций — добавление, удаление, очистка и поиск элементов. Также добавление функции удаления четных и повторяющихся элементов.

  1. Ход работы

В основе списка лежит класс Node, который хранит значение элемента и ссылку на следующий узел. Класс MyList управляет списком через два указателя: на голову и на хвост списка. (рис. 1)

Рисунок 1 — Создание классов

Добавление элемента: Новый элемент добавляется в конец списка. Если список пустой, новый элемент становится и головой, и хвостом, а его ссылка указывает на сам себя. В противном случае обновляется указатель хвоста (рис. 2)

Рисунок 2 - Добавление

Удаление элемента: Программа проходит по списку и удаляет первый найденный элемент с указанным значением. Если элемент — голова списка, список корректно обновляется, чтобы хвостовой элемент продолжал ссылаться на новую голову (рис.3)

Рисунок 3 — Удаление

Очистка списка: Полное удаление всех элементов — указатели на голову и хвост обнуляются (рис. 4)

Рисунок 4 — Очистка списка

Поиск элемента: Программа циклично проходит по списку и возвращает результат, если находит элемент (рис. 5)

Рисунок 5 — Поиск

Удаление четных элементов: Список проверяется на наличие четных значений, которые удаляются, с корректировкой указателей (рис. 6)

Рисунок 6 — Удаление четного элемента

Удаление дубликатов: Программа ищет и удаляет повторяющиеся элементы, обновляя ссылки внутри списка (рис. 7)

Рисунок 7 — Удаление одинаковых элементов

Вывод элементов: Проходит по всем узлам, начиная с головы, и выводит значения элементов (рис. 8)

Рисунок 8 — Вывод списка

Сделал блок-схему(рис.9) и написал текстовое описание:

Функция RemoveDuplicates удаляет дубликаты, используя два указателя: current и runner. Указатель current фиксируется на текущем узле, а runner проходит по всем последующим узлам. Если значение узла runner совпадает со значением узла current, то runner изменяет ссылку на следующий узел, тем самым пропуская дубликат. Если дубликат находится в конце списка, указатель tail обновляется, чтобы указывать на предыдущий узел runner. Этот процесс продолжается, пока все узлы не будут проверены.

Р исунок 9 - Блок-схема

Соседние файлы в папке ПР3