Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <string>
- #include <list>
- struct Student
- {
- std::string name;
- std::string group;
- unsigned short book;
- unsigned short marks[4];
- };
- struct ListIterator
- {
- Student s;
- ListIterator *prev = nullptr;
- ListIterator *next = nullptr;
- };
- void swap(ListIterator &l, ListIterator &r)
- {
- Student s = std::move(l.s);
- l.s = std::move(r.s);
- r.s = std::move(s);
- }
- void sort(ListIterator *start)
- {
- ListIterator *inside;
- for (ListIterator *current = start; current != nullptr; current = current->next) {
- ListIterator *minimum = current;
- for (ListIterator *inside = current; inside != nullptr; inside = inside->next) {
- if (inside->s.name < minimum->s.name) {
- minimum = inside;
- }
- }
- if (minimum != current) {
- swap(*minimum, *current);
- }
- }
- }
- int main()
- {
- ListIterator *currentIterator = nullptr; // Текущий итератор
- size_t n;
- std::cout << "Enter amount: ";
- std::cin >> n; // Количество студентов
- for (size_t i = 0; i < n; i++) {
- if (currentIterator == nullptr) { // Если нет еще итератора
- currentIterator = new ListIterator; // Создаем
- } else {
- auto newIterator = new ListIterator; // Создаем следующий
- currentIterator->next = newIterator; // Ликнуем итераторы
- newIterator->prev = currentIterator;
- currentIterator = newIterator;
- }
- Student &s = currentIterator->s; // Ссылка на текущего студента
- std::cin.ignore();
- std::cout << "[Student " << std::setw(2) << i << "] Name : ";
- std::getline(std::cin, s.name);
- std::cout << "[Student " << std::setw(2) << i << "] Group : ";
- std::getline(std::cin, s.group);
- std::cout << "[Student " << std::setw(2) << i << "] Book : ";
- std::cin >> s.book;
- std::cout << "[Student " << std::setw(2) << i << "] Marks(4): ";
- for (size_t j = 0; j < 4; j++) {
- std::cin >> s.marks[j];
- }
- }
- while (currentIterator->prev != nullptr) { // Пока не дойдем до начала
- currentIterator = currentIterator->prev;
- }
- sort(currentIterator); // Вызываем сортировку
- std::cout << "Result" << std::endl;
- for (ListIterator *current = currentIterator; current != nullptr; current = current->next) {
- std::cout << "[Student] Name : " << current->s.name << std::endl;
- std::cout << "[Student] Group : " << current->s.group << std::endl;
- std::cout << "[Student] Book : " << current->s.book << std::endl;
- std::cout << "[Student] Marks: ";
- for (size_t j = 0; j < 4; j++) {
- std::cout << current->s.marks[j] << " ";
- }
- std::cout << std::endl;
- }
- for (ListIterator *current = currentIterator; current != nullptr; current = current->next) {
- if (current->prev != nullptr) {
- delete current->prev;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement