
СД Практика 3
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра комплексной информационной безопасности электронновычислительных систем (КИБЭВС)
СПИСКИ Отчет по практической работе №3
по дисциплине «Структуры данных»
Студент гр. 7х3-х
_______ ххххххх
_______
Принял: Преподаватель КИБЭВС
_______ Уразаев Д.Р.
_______
Томск 2024
Задание
Реализовать динамический список при помощи двух классов. Класс node отвечает за узел элемента списка, класс List – за работу со списком. Реализовать интерфейсную часть – методы: инициализация пустого списка; добавление элементов списка в конец bool add (int element); удаление заданного элемента из списка bool remove_item (int element ), где int element – удаляемый элемент,
метод возвращает true если удаление элемента прошло успешно; очистка списка – bool clear(), возвращает true при успешной очистке, false в противоположном случае; поиск элемента списка по образцу int search(int element), где int element – искомый элемент = образец. Метод возвращает индекс первого вхождения искомого элемента, если элемента нет вернуть -1.
Вариант 2. Реализуемый список должен быть двусвязным. Дополнительно реализовать методы: поиск элемента по индексу, решить задачу слияния двух списков. Второй список добавляется после элемента с указанным индексом. Третий список для слияния не использовать.
2
|
|
Содержание |
1 Введение.............................................................................................................. |
4 |
|
2 ХОД РАБОТЫ.................................................................................................... |
5 |
|
2.1 |
Классы........................................................................................................ |
5 |
2.2 |
Методы....................................................................................................... |
5 |
2.3 |
Метод Add()............................................................................................... |
6 |
2.4 |
Метод RemoveItem().................................................................................. |
8 |
2.5 |
Метод Clear().............................................................................................. |
9 |
2.6 |
Метод Search()......................................................................................... |
10 |
2.7 |
Метод SearchByIndex()............................................................................ |
11 |
2.8 |
Метод Merge().......................................................................................... |
12 |
2.9 |
Метод PrintList()...................................................................................... |
14 |
Заключение........................................................................................................... |
16 |
|
Приложение А...................................................................................................... |
17 |
3
1 Введение
Целью работы является овладеть навыками реализации списка и разработки алгоритмов взаимодействия с ним на языке программирования C#.
4

2 ХОД РАБОТЫ
2.1Классы
Вприложении А представлен листинг реализованной программы.
Был реализован класс Node, который отвечает за инициализацию и переопределение списков. Был реализован класс List, который отвечает за работу со списком. Классы представлены на рисунке 2.1.
Рисунок 2.1 – Классы
2.2Методы
Всоответствии с заданием были реализованы методы для добавления
элемента в конец списка, удаления элемента из списка, очистки списка, поиска индекса по элементу, поиска элемента по индексу, слияния двух списков, а
также дополнительный метод для вывода получаемых списков.
5

2.3 Метод Add()
Этот метод добавляет новый элемент в конец двусвязного списка. Внутри метода создается новый узел, а затем проходит проверка на пустой список.
Если список пуст, то newNode становится первым и последним узлом. Если же список непустой, то устанавливается ссылка Next у текущего последнего узла на newNode и ссылка Prev у newNode на последний узел. tail = newNode
обновляет tail на newNode, поскольку новый узел теперь является последним.
Метод возвращает true, сигнализируя о том, что добавление прошло успешно.
Метод представлен на рисунке 2.2.
Рисунок 2.2 – Метод Add()
6

2.4 Метод RemoveItem()
Метод предназначен для удаления элемента из двусвязного списка.
Переменная current устанавливается в начальный узел списка. С помощью цикла while просматриваются все узлы списка, пока current не достигнет конца списка. Текущий узел проверяется на совпадение его данных с элементом,
который нужно удалить. Если совпадает, то элемент удаляется. Удаление реализуется следующим образом: происходит проверка узла, если он не первый в списке, то устанавливается ссылка Next у предыдущего узла на следующий узел после current. Если узел является первым в списке, то head устанавливается на следующий узел после current. Аналогично происходит проверка на последний узел в списке. True возвращается, если элемент был удален успешно, false, если элемент не найден в списке. Метод представлен на рисунке 2.4.
Рисунок 2.3 – Метод RemoveItem()
7

2.5 Метод Clear()
Метод предназначен для очистки списка от всех элементов. Первому и последнему узлу присваивается значение null. Возвращается true, сигнализируя об успешной очистке списка. Метод представлен на рисунке 2.5.
Рисунок 2.4 – Метод Clear()
8

2.6 Метод Search()
Метод предназначен для поиска индекса элемента в двусвязном списке.
Переменная current устанавливается в начальный узел списка. Переменная index отслеживает индекс текущего узла. С помощью цикла while проходим по всем узлам списка, пока не достигнем его конца. Текущий узел проверяется на совпадение его данных с элементом, который нужно найти. Если совпадает,
метод возвращает индекс найденного элемента. Если элемент не найден, то метод возвращает -1. Метод представлен на рисунке 2.6.
Рисунок 2.5 – Метод Search()
9

2.7 Метод SearchByIndex()
Метод предназначен для поиска элемента по индексу. Работает аналогично методу Search(), но возвращает null, если элемент не найден в списке и значение элемента, если найден. Метод представлен на рисунке 2.7.
Рисунок 2.6 – Метод SearchByIndex()
Была составлена блок-схема для метода Add(). Блок-схема представлена на рисунке 2.7.
10