Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы по АиСД 2023 / Baraeva_Elizaveta_lb1.doc
Скачиваний:
0
Добавлен:
09.09.2026
Размер:
124 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В. И. Ульянова (Ленина)

Кафедра МО ЭВМ

отчет

по лабораторной работе №1

по дисциплине «Алгоритмы и структуры данных»

Тема: Реализация и исследование развернутого связного списка

Студентка гр. 2383

Бараева Е. Н.

Преподаватель

Гаврилов А. В.

Санкт-Петербург

2023

Цель работы.

Реализация и тестирование развёрнутого связного списка, сравнение производительности развёрнутого связного списка с массивом и связным списоком.

Задание.

В рамках данной лабораторной работы необходимо реализовать “новую” структуру, которая называется развернутым связным списком.

У данной структуры необходимо реализовать основные операции: поиск, удаление, вставка, а также функцию вывода всего списка в консоль через пробел. В качестве элементов для заполнения используются целые числа. Так же при инициализации списка существует необязательный параметр n_array (значение по умолчанию = 4), отвечающий за размер физического элемента (т.е. за размер массива).

Для проверки работоспособности структуры необходимо реализовать функцию (не метод класса) check, принимающую на вход два массива: массив arr_1 для заполнения структуры, массив arr_2 для поиска и удаления, а также необязательный параметр n_array (описан выше). Функция должна сначала заполнять развернутый связный список данным arr_1, затем искать элементы arr_2 и удалять их. После каждой операции по обновлению списка необходимо осуществлять полный его вывод в консоль.

Помимо реализации описанного класса Вам необходимо провести исследование его работы: сравнить время (дополнительные исследуемые параметры, такие как память и на то, что Вам хватит фантазии - будут плюсом) у реализованной структуры, массива (для Python используйте list, для Cpp - стандартный массив ) и односвязного списка (код реализации массива и односвязного списка загружать не нужно!).

Чтобы провести исследование необходимо проверить основные операции на маленьком (около 10), среднем (10000) и большом (100000) наборах данных для всех трёх случаев операции (лучший, средний, худший). По итогам исследования в отчёте необходимо предоставить таблицу с результатами замеров, а так же их графическое представление (на одном графике необходимо изобразить одну операцию в одном случае для трёх структур, т.е. суммарно должно получиться 9 графиков).

Выполнение работы.

В начале был создан класс Node, который хранил в себе массив и указатель на следующий элемент. Затем был создан класс UnrolledLinkedList, который принимал необязательный параметр n_array, который отвечал за количество элементов в ноде, таже там была объявлена голова списка, которой присвоилось None. Метод поиска искал элемент по значению и возвращал индекс. С помощью цикла и переменной определялся массив, в котором лежал элемент, и индекс. Если же список был пуст, то выбрасывалось исключение, говорящее о пустоте списка, а если не находилось элемента, то выводилось на экран сообщение о ненахождении элемента. Метод вставки принимает элемент и индекс, на который его нежно поставить. Были осуществлена проверка на корректность индекса. Если же список был пуст и подавался индекс 0, то создавалась голова и туда клался элемент, а сели список был пуст и индекс был не 0, то выбрасывалось исключении о некорректности индекса. Затем с помощью цикла был найден нод, куда нужно поместить элемент, если же он был заполнен, то производилась балансировка, иначе элемент просто вставлялся в конец массива. Вывод списка на экран осуществился также с помощью цикла. Между элементами был пробел, а между надами стрелка, показывающая о переходе на следующий нод. Метод удаления принимал индекс элемента, а выводил его значение. В начале осуществлялась проверка на пустоту списка, если он был пуст, то выбрасывалось исключение. Также если в списке лежал только один элемент, то он удалялся и голове присваивалось None, говорящее о пустоте списка. Если же индекс был меньше 0, то выбрасывалось исключение. С помощью цикла находился массив, в котором лежал элемент и удалялся, пустые ноды были также удалены. Также была реализована функция проверки check, которая принимала два массива и необязательный параметр n_array. Затем создавался список и с помощью двух циклов проводилась вставка и удаление элементов, а между этими операциями выводился весь список.

Разработанный программный код см. в приложении А.

Соседние файлы в папке Лабы по АиСД 2023