Advertisement
Neveles

List

Feb 12th, 2020
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.57 KB | None | 0 0
  1. #include <iostream>
  2. #include "List.h"
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.     List randomList;
  9.     List userList;
  10.     List mergedList;
  11.  
  12.     for (int i = 0; i < 5; ++i)
  13.     {
  14.         randomList += rand() % 10;
  15.     }
  16.  
  17.     cout << "<User list input>" << endl;
  18.     int value = 0;
  19.     for (int i = 0; i < 5; ++i)
  20.     {
  21.         cin >> value;
  22.         userList += value;
  23.     }
  24.  
  25.     cout << endl << "<Merge list input>" << endl;
  26.     for (int i = 0; i < 5; ++i)
  27.     {
  28.         cin >> value;
  29.         mergedList += value;
  30.     }
  31.  
  32.     mergedList.merge(userList);
  33.  
  34.     cout << endl << "Random list:" << endl << randomList << endl;
  35.     cout << "User list:" << endl << userList << endl;
  36.     cout << "Merged list:" << endl << mergedList << endl;
  37.  
  38.     return 0;
  39. }
  40.  
  41.  
  42. #pragma once
  43.  
  44. #include <iostream>
  45.  
  46. using namespace std;
  47.  
  48. class List
  49. {
  50. private:
  51.     struct Node
  52.     {
  53.         int value_;
  54.         Node* next_;
  55.         Node* prev_;
  56.         Node(int value = 0, Node * next = nullptr, Node* prev = nullptr) : value_(value), next_(next), prev_(prev) {};
  57.         ~Node()
  58.         {
  59.             if (next_ != nullptr)
  60.                 delete next_;
  61.         }
  62.     };
  63.     Node* head_ = nullptr;
  64.     Node* tail_ = nullptr;
  65.     void clear();
  66.  
  67. public:
  68.     List();
  69.     List(List&& old) noexcept;
  70.     ~List();
  71.     void operator+=(int value);
  72.     friend ostream& operator<< (std::ostream& out, const List& list);
  73.     bool operator==(int value);
  74.     friend List operator&(List value, int value2);
  75.     friend List operator|(List value, int value2);
  76.     void merge(List& other);
  77.    
  78.     //void push_back(int value);
  79.     //void removeMinimal();
  80.     //void removeRepeats();
  81.     //void removeLess();
  82.     //void reduce();
  83.     //void insert(const List& other);
  84.     //void insertSorted(int value);
  85.     //void joinSorted(const List& other);
  86. };
  87.  
  88.  
  89. #include "List.h"
  90.  
  91. List::List(){}
  92.  
  93. List::List(List&& old) noexcept
  94. {
  95.     clear();
  96.     head_ = old.head_;
  97.     old.head_ = nullptr;
  98. }
  99.  
  100. void List::clear()
  101. {
  102.     if( head_ != nullptr)
  103.         delete head_;
  104. }
  105.  
  106. List::~List()
  107. {
  108.     clear();
  109. }
  110.  
  111. void List::operator+=(int value)
  112. {
  113.     if (head_ == nullptr)
  114.     {
  115.         Node* newNode = new Node(value);
  116.         head_ = newNode;
  117.         tail_ = newNode;
  118.     }
  119.     else if (head_->value_ > value)
  120.     {
  121.         Node* newNode = new Node(value, head_);
  122.         head_ = newNode;
  123.     }
  124.     else
  125.     {
  126.         for(Node* ptr = head_; head_ != nullptr; ptr = ptr->next_ )
  127.         {
  128.             if (ptr->next_ != nullptr && ptr->next_->value_ > value)
  129.             {
  130.                 Node* newNode = new Node(value, ptr->next_);
  131.                 ptr->next_ = newNode;
  132.                 break;
  133.             }
  134.             else if(ptr->next_ == nullptr)
  135.             {
  136.                 Node* newNode = new Node(value);
  137.                 ptr->next_ = newNode;
  138.                 tail_ = newNode;
  139.                 break;
  140.             }
  141.             else if (ptr->next_->value_ == value)
  142.                 break;
  143.         }
  144.     }
  145. }
  146.  
  147. ostream& operator<< (std::ostream& out, const List& list)
  148. {
  149.     for(List::Node* ptr = list.head_; ptr != nullptr; ptr = ptr->next_)
  150.         out << ptr->value_ << endl;
  151.     return out;
  152. }
  153.  
  154. bool List::operator==(int value)
  155. {
  156.     return true;
  157. }
  158.  
  159. List operator&(List value, int value2)
  160. {
  161.     List list;
  162.  
  163.     return list;
  164. }
  165.  
  166. List operator|(List value, int value2)
  167. {
  168.     List list;
  169.     return list;
  170. }
  171.  
  172. void List::merge(List& other)
  173. {
  174.     if( other.head_ != nullptr && head_ != nullptr)
  175.         if (other.head_->value_ < head_->value_)
  176.         {
  177.             Node* temp = other.head_->next_;
  178.             head_->next_ = other.head_;
  179.         }
  180.         else
  181.             for (Node* ptr = head_, *scptr = other.head_; ptr != nullptr && scptr != nullptr; ptr = ptr->next_)
  182.             {
  183.                 if(ptr->value_ > scptr->value_)
  184.             }
  185. }
  186.  
  187. /*void List::push_back(int value)
  188. {
  189.     Node* newNode = new Node(value);
  190.     if (head_ == nullptr)
  191.     {
  192.         head_ = newNode;
  193.         tail_ = newNode;
  194.         minValue_ = value;
  195.     }
  196.     else {
  197.         tail_->next_ = newNode;
  198.         tail_ = newNode;
  199.         if (value < minValue_)
  200.             minValue_ = value;
  201.     }
  202. }*/
  203.  
  204. /*void List::removeMinimal()
  205. {
  206.     //  удаляет из списка элемент с наименьшим значением (если их несколько, то удалить надо все)
  207.     Node* ptr = head_;
  208.     Node* prevPtr = nullptr;
  209.     int newMinimal = minValue_;
  210.     while (ptr != nullptr)
  211.     {
  212.         if (ptr->value_ == minValue_)
  213.         {
  214.             if (ptr == head_)
  215.                 head_ = head_->next_;
  216.             else
  217.                 prevPtr->next_ = ptr->next_;
  218.             if (ptr == tail_)
  219.                 tail_ = prevPtr;
  220.             Node* temp = ptr->next_;
  221.             delete ptr;
  222.             ptr = temp;
  223.         }
  224.         else
  225.         {
  226.             if (ptr->value_ < newMinimal || newMinimal == minValue_)
  227.                 newMinimal = ptr->value_;
  228.             prevPtr = ptr;
  229.             ptr = ptr->next_;
  230.         }
  231.     }
  232.     minValue_ = newMinimal;
  233. }*/
  234.  
  235. /*void List::removeRepeats()
  236. {
  237.     Node* iNode = head_;
  238.     while (iNode != nullptr)
  239.     {
  240.         Node* jNode = iNode->next_;
  241.         Node* prevNode = iNode;
  242.         while (jNode != nullptr)
  243.         {
  244.             if (iNode->value_ == jNode->value_) {
  245.                 prevNode->next_ = jNode->next_;
  246.                 Node* temp = jNode->next_;
  247.                 delete jNode;
  248.                 jNode = temp;
  249.             }
  250.             else
  251.             {
  252.                 prevNode = jNode;
  253.                 jNode = jNode->next_;
  254.             }
  255.         }
  256.         iNode = iNode->next_;
  257.     }
  258. }*/
  259.  
  260. /*void List::removeLess()
  261. {
  262.     Node* iNode = head_;
  263.     while (iNode != nullptr)
  264.     {
  265.         Node* jNode = iNode->next_;
  266.         Node* prevNode = iNode;
  267.         while (jNode != nullptr)
  268.         {
  269.             if (iNode->value_ > jNode->value_) {
  270.                 prevNode->next_ = jNode->next_;
  271.                 Node* temp = jNode->next_;
  272.                 delete jNode;
  273.                 jNode = temp;
  274.             }
  275.             else
  276.             {
  277.                 prevNode = jNode;
  278.                 jNode = jNode->next_;
  279.             }
  280.         }
  281.         iNode = iNode->next_;
  282.     }
  283. }*/
  284.  
  285. /*void List::reduce()
  286. {
  287.     Node* ptr = head_;
  288.     while (ptr != nullptr && ptr->next_ != nullptr)
  289.     {
  290.         ptr->value_ += ptr->next_->value_;
  291.         Node* temp = ptr->next_->next_;
  292.         delete ptr->next_;
  293.         ptr->next_ = temp;
  294.         ptr = temp;
  295.     }
  296. }*/
  297.  
  298. /*void List::insert(const List& other)
  299. {
  300.     Node* ptr = other.head_;
  301.     while (ptr != nullptr)
  302.     {
  303.         Node* newNode = new Node(ptr->value_);
  304.         if (head_ == nullptr)
  305.             head_ = tail_ = newNode;
  306.         else
  307.         {
  308.             tail_->next_ = newNode;
  309.             tail_ = newNode;
  310.         }
  311.         ptr = ptr->next_;
  312.     }
  313.     if (other.minValue_ < minValue_)
  314.         minValue_ = other.minValue_;
  315. }*/
  316.  
  317. /*void List::insertSorted(int value)
  318. {
  319.     if (head_ == nullptr)
  320.     {
  321.         Node* newNode = new Node(value);
  322.         head_ = newNode;
  323.         tail_ = newNode;
  324.         minValue_ = value;
  325.         return;
  326.     }
  327.     if (head_->value_ > value)
  328.     {
  329.         Node* newNode = new Node(value, head_);
  330.         head_ = newNode;
  331.         minValue_ = value;
  332.         return;
  333.     }
  334.     Node* ptr = head_;
  335.     while (ptr != nullptr)
  336.     {
  337.         if (ptr->next_ == nullptr)
  338.         {
  339.             Node* newNode = new Node(value);
  340.             ptr->next_ = newNode;
  341.             tail_ = newNode;
  342.             return;
  343.         }
  344.         else if (ptr->next_->value_ > value)
  345.         {
  346.             Node* newNode = new Node(value, ptr->next_);
  347.             ptr->next_ = newNode;
  348.             return;
  349.         }
  350.         else
  351.             ptr = ptr->next_;
  352.  
  353.     }
  354. }*/
  355.  
  356. /*void List::joinSorted(const List& other)
  357. {
  358.     Node* ptr = other.head_;
  359.     while (ptr != nullptr)
  360.     {
  361.         insertSorted(ptr->value_);
  362.         ptr = ptr->next_;
  363.     }
  364. }*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement