 
        
        СД Практика 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
