Практика 3 - Списки - СФ
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕЕНЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра комплексной информационной безопасности электронно-
вычислительных систем (КИБЭВС)
Списки Отчет по практической работе №3
По дисциплине «Структуры данных»
Студент гр. ххххх
________ ххххх
________
Принял Преподаватель КИБЭВС
________ ххххх
________
Томск 2022
Задание
Реализовать динамический список при помощи двух классов. Класс node -
отвечает за узел элемента списка, класс List - за работу со списком. Реализовать интерфейсную часть - методы:
1)инициализация пустого списка - делаем это в конструкторе, если используются классы;
2)добавление элементов списка в конец bool add (int element);
3)удаление заданного элемента из списка bool remove_item (int element ),
где int element - удаляемый элемент, метод возвращает true если удаление
элемента прошло успешно;
4)Очистка списка - bool clear(), возвращает true при успешной очистке, false в противоположном случае;
5)поиск элемента списка по образцу.
Вариант 8. Реализуемый список должен быть циклическим. Два упорядоченных динамических списка объединить в один упорядоченный -
реализовать в виде метода. Реализовать сортировку элементов списка в виде метода.
2
Содержание
1 Введение …………………………………………………………………………... 4
2 Ход работы ………………………………………………………………………... 5
3 Заключение ……………………………………………………………………… 10
Приложение А ………………………………………………………………..…… 11
3
1 Введение
Цель работы: овладеть навыками реализации списка и разработки алгоритмов взаимодействия с ним на языке программирования C#.
4
2 Ход работы
Связный список — базовая динамическая структура данных, состоящая из узлов, каждый из которых содержит как данные, так и ссылку на следующий узел списка.
Листинг программы представлен в приложении А.
При инициализации класса List задаются его свойства head и tail равные null, а также счетчик количества элементов count=0.
При добавлении нового элемента в список выполняется проверка на наличие первого элемента, если его нет, выполняется присвоение первому элементу значения head и tail, т.к. список циклический (Рисунок 2.1), счетчик count увеличивается на 1.
Рисунок 2.1 - Добавление элемента в конец списка
При удалении проверяется положение элемента в списке, а после ссылка на этот элемент переносится на следующий, счетчик count уменьшается на 1.
Если элемент был один, то происходит тоже что и при отчистке (Рисунок 2.2).
5
Рисунок 2.2 - Удаление элемента из списка
При очистке списка элементы head и tail приравниваются к null, а также счетчик элементов count становится равным нулю. На рисунке 2.3 представлен код метода.
6
Рисунок 2.3 - Очистка списка
При поиске элемента сначала проверяется налненность массива, если он пуст, т.е. head равна null, иначе проверяется весь массив с первого элемента, и
если элемент не равен, то ссылка переходит на следующий элемент, и индекс увеличивается на 1. На рисунке 2.4 представлен код метода.
Рисунок 2.4 - Поиск индекса элемента
При слиянии двух списков на вход метода (Union) подаются оба списка,
после чего ко второму добавляются элементы первого , после этого все элементы второго списка подаются в массив f. Далее применяется быстрая сортировка к
7
массиву f. Затем происходит отчистка списка, в итоге отсортированный массив последовательно добавляется в список(рисунок 2.5).
Рисунок 2.5 - Соединение, сортировка списка
8
На рисунке 2.6 представлена блок-схема функции по варианту.
Рисунок 2.6 - Функция Union
9
3Заключение
Врезультате практической работы был написан алгоритм реализации циклического списка, а также была написана функция по объединению и сортировке списка.
10