Advertisement
Neveles

Untitled

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