Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace std;
- struct Investment
- {
- string name;
- int sum;
- string type;
- int percent;
- };
- struct ListNode
- {
- Investment value;
- ListNode *next = nullptr;
- ListNode *prev = nullptr;
- };
- struct List
- {
- ListNode *first = nullptr;
- ListNode *last = nullptr;
- };
- void swapNear(List &list, ListNode &left, ListNode &right)
- {
- if (&left == list.first) {
- list.first = &right;
- }
- if (&right == list.last) {
- list.last = &left;
- }
- ListNode tempLeft = left;
- if (left.prev != nullptr) {
- left.prev->next = &right;
- }
- if (right.next != nullptr) {
- right.next->prev = &left;
- }
- left.prev = &right;
- left.next = right.next;
- right.prev = tempLeft.prev;
- right.next = &left;
- }
- void sort(List &list)
- {
- ListNode *node = list.first;
- while (node != nullptr) {
- ListNode *insideNode = node;
- while (insideNode != nullptr && insideNode->next != nullptr
- && insideNode->next->value.sum < insideNode->value.sum) {
- swapNear(list, *insideNode, *(insideNode->next));
- insideNode = insideNode->next;
- }
- node = node->next;
- }
- }
- int main()
- {
- List list;
- int amount;
- cout << "Enter amount of investments: ";
- cin >> amount;
- for (int i = 0; i < amount; i++) {
- ListNode *node = new ListNode;
- cout << "Investment " << i << endl;
- cout << "Name: ";
- cin.ignore();
- getline(cin, node->value.name);
- cout << "Sum: ";
- cin >> node->value.sum;
- cin.ignore();
- cout << "Type: ";
- getline(cin, node->value.type);
- cout << "Percent: ";
- cin >> node->value.percent;
- if (list.first == nullptr) {
- list.first = node;
- list.last = node;
- } else {
- list.last->next = node;
- list.last = node;
- }
- }
- cout << endl << endl;
- sort(list);
- ListNode *node = list.first;
- while (node != nullptr) {
- cout << "Name: " << node->value.name << endl;
- cout << "Sum: " << node->value.sum << endl;
- cout << "Type: " << node->value.type << endl;
- cout << "Percent: " << node->value.percent << endl;
- node = node->next;
- }
- node = list.first;
- while (node != nullptr) {
- ListNode *temp = node;
- delete temp;
- node = node->next;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement