C++
Из односвязного списка с фамилиями студентов двух групп сформировать два циклических по группам, причем фамилии в циклических списках должны быть упорядочены.
Ответы
#include <iostream>
#include <string>
struct Student {
std::string surname;
Student* next;
};
void formCyclicGroup(Student*& head, int groupSize) {
Student* tail = head;
for (int i = 0; i < groupSize - 1; ++i) {
tail = tail->next;
}
tail->next = head;
}
void sortSingleLinkedList(Student*& head) {
for (Student* i = head; i != nullptr; i = i->next) {
for (Student* j = i->next; j != nullptr; j = j->next) {
if (i->surname > j->surname) {
std::swap(i->surname, j->surname);
}
}
}
}
int main() {
Student* firstGroup = new Student{"Johnson", new Student{"Smith", new Student{"Brown", nullptr}}};
Student* secondGroup = new Student{"Davis", new Student{"Jones", new Student{"Miller", nullptr}}};
sortSingleLinkedList(firstGroup);
formCyclicGroup(firstGroup, 3);
sortSingleLinkedList(secondGroup);
formCyclicGroup(secondGroup, 3);
return 0;
}
В этом примере sortSingleLinkedList сортирует список в порядке возрастания, а formCyclicGroup принимает заголовок списка и размер группы в качестве входных данных и делает список циклическим.