Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #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::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::getline(std::cin, s.name);
- std::getline(std::cin, s.group);
- std::cin >> s.book;
- for (size_t j = 0; j < 4; j++) {
- std::cin >> s.marks[j];
- }
- }
- while (currentIterator->prev != nullptr) {
- currentIterator = currentIterator->prev;
- }
- sort(currentIterator);
- for (ListIterator *current = currentIterator; current != nullptr; current = current->next) {
- std::cout << current->s.name << 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