Advertisement
Toliak

__6

Dec 19th, 2018
324
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.54 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. struct Investment
  7. {
  8.     string name;
  9.     int sum;
  10.     string type;
  11.     int percent;
  12. };
  13.  
  14. struct ListNode
  15. {
  16.     Investment value;
  17.  
  18.     ListNode *next = nullptr;
  19.     ListNode *prev = nullptr;
  20. };
  21.  
  22. struct List
  23. {
  24.     ListNode *first = nullptr;
  25.     ListNode *last = nullptr;
  26. };
  27.  
  28. void swapNear(List &list, ListNode &left, ListNode &right)
  29. {
  30.     if (&left == list.first) {
  31.         list.first = &right;
  32.     }
  33.     if (&right == list.last) {
  34.         list.last = &left;
  35.     }
  36.  
  37.     ListNode tempLeft = left;
  38.  
  39.     if (left.prev != nullptr) {
  40.         left.prev->next = &right;
  41.     }
  42.     if (right.next != nullptr) {
  43.         right.next->prev = &left;
  44.     }
  45.  
  46.     left.prev = &right;
  47.     left.next = right.next;
  48.  
  49.     right.prev = tempLeft.prev;
  50.     right.next = &left;
  51. }
  52.  
  53. void sort(List &list)
  54. {
  55.     ListNode *node = list.first;
  56.     while (node != nullptr) {
  57.         ListNode *insideNode = node;
  58.         while (insideNode != nullptr && insideNode->next != nullptr
  59.             && insideNode->next->value.sum < insideNode->value.sum) {
  60.  
  61.             swapNear(list, *insideNode, *(insideNode->next));
  62.  
  63.             insideNode = insideNode->next;
  64.         }
  65.         node = node->next;
  66.     }
  67. }
  68.  
  69. int main()
  70. {
  71.     List list;
  72.  
  73.     int amount;
  74.     cout << "Enter amount of investments: ";
  75.     cin >> amount;
  76.  
  77.     for (int i = 0; i < amount; i++) {
  78.         ListNode *node = new ListNode;
  79.  
  80.         cout << "Investment " << i << endl;
  81.         cout << "Name: ";
  82.         cin.ignore();
  83.         getline(cin, node->value.name);
  84.         cout << "Sum: ";
  85.         cin >> node->value.sum;
  86.         cin.ignore();
  87.         cout << "Type: ";
  88.         getline(cin, node->value.type);
  89.         cout << "Percent: ";
  90.         cin >> node->value.percent;
  91.  
  92.         if (list.first == nullptr) {
  93.             list.first = node;
  94.             list.last = node;
  95.         } else {
  96.             list.last->next = node;
  97.             list.last = node;
  98.         }
  99.     }
  100.  
  101.  
  102.     cout << endl << endl;
  103.  
  104.     sort(list);
  105.  
  106.     ListNode *node = list.first;
  107.     while (node != nullptr) {
  108.  
  109.         cout << "Name: " << node->value.name << endl;
  110.         cout << "Sum: " << node->value.sum << endl;
  111.         cout << "Type: " << node->value.type << endl;
  112.         cout << "Percent: " << node->value.percent << endl;
  113.  
  114.         node = node->next;
  115.     }
  116.  
  117.     node = list.first;
  118.     while (node != nullptr) {
  119.         ListNode *temp = node;
  120.         delete temp;
  121.  
  122.         node = node->next;
  123.     }
  124.  
  125.     return 0;
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement