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

сд3

.pdf
Скачиваний:
1
Добавлен:
01.12.2024
Размер:
574.77 Кб
Скачать

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

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

КИБЭВС

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

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