Отчет к ПР7
.docxФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
Кафедра безопасности информационных систем
ОТЧЁТ
по практической работе № 7 на тему: «Разработка и применение циклического списка.
Задача Иосифа.»
по дисциплине «Алгоритмы и структуры данных»
Выполнил: студент группы ИСТ-114, Медведева С.Г.,
«16» ноября 2022 г. ___________/Медведева С.Г.
Принял: к.ф.-м.н., доцент, И.А. Моисеев
«16» ноября 2022 г. ___________/ И.А. Моисеев /
1 Основная часть
1.1 Цель работы
Разработка и применение циклического списка. Задача Иосифа.
1.2 Результаты выполнения работы
#include <iostream> using namespace std; struct List{ List * next; int data; }; void addList (List ** root, int a){ if (*root != nullptr){ List * pList = *root; while (pList->next != *root){ pList = pList->next; } List * pList2 = new List(); pList2->data = a; pList->next = pList2; pList2->next = *root; } else{ List * pList = new List(); pList -> data = a; pList->next= pList; *root = pList; } } void printList (List ** root){ List *pList = *root; if (pList!= nullptr) { do { cout << pList->data << " "; pList = pList->next; } while (pList != *root); } } List** findList (List ** root, int host){ List* pList = *root; for (int i {}; i < host-2; i++){ pList = pList->next; } List** pList1 = new List * (); *pList1 = pList; //cout << "Значение удаляемого узда ->" << pList->next->data << endl; return pList1; } void delList (List ** root,List** pListDel){ List* pList = *pListDel; if (pList->next == *root && pList == *root){ delete(pList); *root = nullptr; } else{ List* pList1 = *pListDel; pList1= pList1->next; pList->next = pList->next->next; delete(pList1); *root = pList->next; } } int main() { List ** root = new List*(); *root = nullptr; for (int i{2}; i < 21; i++){ cout << endl << endl << "При м = " << i << endl; for (int j{}; j < 20;j++){ addList(root,j+1); } cout << "Список в прямом порядке\n"; printList(root); int host = i; List *pList = *root; while (pList->next != *root || pList != *root) { delList(root, (findList(root, host))); pList = *root; } cout << endl << "В списке остался узел со значением: " << pList->data; delete(pList); *root = nullptr; } return 0; }
Результат выдачи:
При м = 2
В списке остался узел со значением: 9
При м = 3
В списке остался узел со значением: 20
При м = 4
В списке остался узел со значением: 17
При м = 5
В списке остался узел со значением: 7
При м = 6
В списке остался узел со значением: 20
При м = 7
В списке остался узел со значением: 3
При м = 8
В списке остался узел со значением: 1
При м = 9
В списке остался узел со значением: 6
При м = 10
В списке остался узел со значением: 3
При м = 11
В списке остался узел со значением: 15
При м = 12
В списке остался узел со значением: 11
При м = 13
В списке остался узел со значением: 17
При м = 14
В списке остался узел со значением: 11
При м = 15
В списке остался узел со значением: 7
При м = 16
В списке остался узел со значением: 1
При м = 17
В списке остался узел со значением: 6
При м = 18
В списке остался узел со значением: 5
При м = 19
В списке остался узел со значением: 11
При м = 20
В списке остался узел со значением: 2
САНКТ-ПЕТЕРБУГР
2022