Advertisement
Toliak

lab6_raw

Oct 27th, 2018
345
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.84 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <list>
  4.  
  5. struct Student
  6. {
  7.     std::string name;
  8.     std::string group;
  9.     unsigned short book;
  10.     unsigned short marks[4];
  11. };
  12.  
  13. struct ListIterator
  14. {
  15.     Student s;
  16.     ListIterator *prev = nullptr;
  17.     ListIterator *next = nullptr;
  18. };
  19.  
  20. void swap(ListIterator &l, ListIterator &r)
  21. {
  22.     Student s = std::move(l.s);
  23.     l.s = std::move(r.s);
  24.     r.s = std::move(s);
  25. }
  26.  
  27.  
  28. void sort(ListIterator *start)
  29. {
  30.     ListIterator *inside;
  31.     for (ListIterator *current = start; current != nullptr; current = current->next) {
  32.         ListIterator *minimum = current;
  33.         for (ListIterator *inside = current; inside != nullptr; inside = inside->next) {
  34.             if (inside->s.name < minimum->s.name) {
  35.                 minimum = inside;
  36.             }
  37.         }
  38.  
  39.         if (minimum != current) {
  40.             swap(*minimum, *current);
  41.         }
  42.     }
  43. }
  44.  
  45. int main()
  46. {
  47.     ListIterator *currentIterator = nullptr;
  48.  
  49.     size_t n;
  50.     std::cin >> n;
  51.     for (size_t i = 0; i < n; i++) {
  52.         if (currentIterator == nullptr) {
  53.             currentIterator = new ListIterator;
  54.         } else {
  55.             auto newIterator = new ListIterator;
  56.             currentIterator->next = newIterator;
  57.             newIterator->prev = currentIterator;
  58.             currentIterator = newIterator;
  59.         }
  60.         Student &s = currentIterator->s;
  61.  
  62.         std::cin.ignore();
  63.         std::getline(std::cin, s.name);
  64.         std::getline(std::cin, s.group);
  65.         std::cin >> s.book;
  66.         for (size_t j = 0; j < 4; j++) {
  67.             std::cin >> s.marks[j];
  68.         }
  69.     }
  70.  
  71.     while (currentIterator->prev != nullptr) {
  72.         currentIterator = currentIterator->prev;
  73.     }
  74.  
  75.     sort(currentIterator);
  76.     for (ListIterator *current = currentIterator; current != nullptr; current = current->next) {
  77.         std::cout << current->s.name << std::endl;
  78.     }
  79.  
  80.     for (ListIterator *current = currentIterator; current != nullptr; current = current->next) {
  81.         if (current->prev != nullptr) {
  82.             delete current->prev;
  83.         }
  84.     }
  85.  
  86.     return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement