
сд3
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
КИБЭВС
СПИСКИ Отчет по практической работе №3
по дисциплине «Структуры данных»
Студент гр. 713-1
_______ В.С.Колосова
_______
Принял:
преподаватель КИБЭВС
_______ Е.Е. Лунёва
_______
Томск 2024
Задание
Реализовать динамический список при помощи двух классов. Класс node -
отвечает за узел элемента списка, класс List - за работу со списком. Реализовать интерфейсную часть - методы:
•инициализация пустого списка - делаем это в конструкторе, если используются классы;
•добавление элементов списка в конец bool add (int element);
•удаление заданного элемента из списка bool remove_item (int element), где int element - удаляемый элемент, метод возвращает true если удаление элемента прошло успешно;
•очистка списка -- bool clear(), возвращает true при успешной очистке, false
в противоположном случае;
•поиск элемента списка по образцу.
Вариант 8. Реализуемый список должен быть циклическим. Два упорядоченных динамических списка объединить в один упорядоченный -
реализовать в виде метода. Реализовать сортировку элементов списка в виде метода, массив для сортировки не использовать.
2
|
|
Содержание |
Задание ......................................................................................................................... |
2 |
|
1 |
Введение.................................................................................................................... |
4 |
2 |
Ход работы................................................................................................................ |
5 |
3 |
Заключение ............................................................................................................. |
13 |
Приложение А ........................................................................................................... |
14 |
3
1 Введение
Целью работы является реализация динамического цикличного списка при
помощи двух классов и реализация методов:
•инициализация пустого списка - делаем это в конструкторе, если используются классы;
•добавление элементов списка в конец bool add (int element);
•удаление заданного элемента из списка bool remove_item (int element), где int element - удаляемый элемент, метод возвращает true если удаление элемента прошло успешно;
•очистка списка -- bool clear(), возвращает true при успешной очистке, false
в противоположном случае;
•поиск элемента списка по образцу;
•два упорядоченных динамических списка объединить в один упорядочен-
ный;
•реализовать сортировку элементов списка, массив для сортировки не ис-
пользовать.
4

2 Ход работы
Реализовано два класса и инициализация цикличного списка (рисунок 2.1).
Класс Node хранит в себе данные текущего узла и ссылку на следующий. Класс
List хранит в себе методы по заданию и инициализацию пустого списка c
переменными первого и конечного узлов.
Рисунок 2.1 — Классы Node и List
Был реализован метод Add, который добавляет элемент в конец списка, в
классе List (рисунок 2.2). Метод создаёт новый узел с заданными данными и проверяет на наличие других узлов, если не существуют других узлов, то устанавливает на нём метки начала и конца списка, иначе на нём ставится только метка хвоста.
5

Рисунок 2.1 — Реализация метода Add, с проверкой на наличие других узлов в списке, в классе List
Реализован метод RemoveItem, который удаляет выбранный элемент из списка, в классе List (рисунок 2.2). В начале метода идёт проверка на наличие узлов, если их нет, то возвращает false. Создаются указатели на текущий и предыдущий узлы, которые изменят первый и конечный узел. Далее следует цикл do…while, работающий до возвращения к первому узлу, в котором осуществляется несколько проверок, по окончании которых изменятся начальный и конечный узел на указатели. При удачном удалении элемента из списка возвращает true.
6

Рисунок 2.2 — Проверки на исключения в методе RemoveItem в классе List
Реализован метод Clear, который полностью очищает список, в классе List (рисунок 2.3). В данном методе происходит проверка на отсутствие узлов, если узлов не существует, то метод возвращает false. Иначе обнуляет первый и конечный узел. При успешной очистке возвращает true.
7

Рисунок 2.3 — Метод Сlear в классе List
Реализован метод Search, в котором инициализируется переменная,
которая указывает на первый элемент списка, и переменная, которая хранит индекс текущего элемента (рисунок 2.4). Запускается цикл dowhile, который продолжается до тех пор, пока первый элемент цикла не вернется к началу списка. Внутри цикла проверяется, равен ли текущий элемент искомому элементу. Если равен, то возвращается индекс. Если элемент не найден, возвращает сообщение об отсутствии элемента в списке.
Рисунок 2.4 — Метод Search в классе List
8

Реализован метод Sort, который сортирует список по возрастанию значений элементов с использованием сортировки "пузырьком" (рисунок 2.5).
Он выполняет проход по списку и сравнивает каждый элемент с его следующим.
Если элемент больше следующего, они меняются местами. Процесс повторяется до тех пор, пока не будут произведены обмены элементов.
Рисунок 2.5 — Метод Sort в классе List
Был реализован метод MergeSortedLists, который принимает список и инициализирует переменную, которая указывает на первый элемент старого списка (рисунок 2.6). Запускается цикл do-while, который добавляет элементы из старого списка в текущий список. Цикл продолжается до тех пор, пока не будет добавлен весь список. Внутри цикла вызывается метод, который добавляет текущий элемент в текущий список. Переменная каждый раз обновляется для
следующего элемента старого списка. |
После |
цикла do-while все элементы |
из старого списка были добавлены в |
текущий |
список. Затем вызывается |
метод Sort, который сортирует объединенный список.
9

Рисунок 2.6 — Метод MergeSortedLists в классе List
Метод PrintList проверяет список на наличие в нем элементов (рисунок 2.7). Если элементы отсутствует, выводится соответствующее сообщение, если список не пуст, то инициализируется переменная, обозначающая начало списка. С
помощью цикла do-while список выводится на экран.
Рисунок 2.7 — Метод PrintList в классе List
10