
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра безопасности информационных систем (БИС)
СПИСКИ
Отчет по практической работе №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
Введение
Целью данного задания является создание простого динамического циклического списока с использованием двух классов. Реализация базовых операций — добавление, удаление, очистка и поиск элементов. Также добавление функции удаления четных и повторяющихся элементов.
Ход работы
В основе списка
лежит класс 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 - Блок-схема