Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СД Практика 3

.pdf
Скачиваний:
0
Добавлен:
17.06.2025
Размер:
577.89 Кб
Скачать

Министерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра комплексной информационной безопасности электронновычислительных систем (КИБЭВС)

СПИСКИ Отчет по практической работе №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

Соседние файлы в предмете Структуры данных