vencinachev

Set-v1

May 10th, 2021
658
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. template <class T>
  6. class Node
  7. {
  8.     public:
  9.         T data;
  10.         Node* next;
  11. };
  12.  
  13. template <class T>
  14. class Set
  15. {
  16.    private:
  17.       Node<T> *head;
  18.       int size;
  19.    public:
  20.       Set()
  21.       {
  22.           this->head = nullptr;
  23.           this->size = 0;
  24.       }
  25.  
  26.       int getSize() const
  27.       {
  28.           return this->size;
  29.       }
  30.  
  31.       void addElement(T el)
  32.       {
  33.           if (!this->containsElement(el))
  34.           {
  35.               Node<T> *node = new Node<T>();
  36.               node->data = el;
  37.               node->next = this->head;
  38.               this->head = node;
  39.               this->size++;
  40.           }
  41.       }
  42.  
  43.       void removeElement(T el)
  44.       {
  45.           Node<T> *current = head;
  46.           Node<T> *prev = current;
  47.           while (current != nullptr)
  48.           {
  49.               if (current->data == el)
  50.               {
  51.                   prev->next = current->next;
  52.                   delete current;
  53.                   this->size--;
  54.                   return;
  55.               }
  56.               prev = current;
  57.               current = current->next;
  58.           }
  59.       }
  60.  
  61.       bool containsElement(T el)
  62.       {
  63.           Node<T> *current = head;
  64.           while (current != nullptr)
  65.           {
  66.               if (current->data == el)
  67.               {
  68.                   return true;  // element exists
  69.               }
  70.               current = current->next;
  71.           }
  72.           return false;
  73.       }
  74.  
  75.       Set<T> unionSets(Set<T>& other)
  76.       {
  77.           Set<T> result;
  78.           Node<T> *current = this->head;
  79.           while (current != nullptr)
  80.           {
  81.               result.addElement(current->data);
  82.               current = current->next;
  83.           }
  84.  
  85.           current = other.head;
  86.           while (current != nullptr)
  87.           {
  88.               result.addElement(current->data);
  89.               current = current->next;
  90.           }
  91.  
  92.           return result;
  93.       }
  94.  
  95.       Set<T> intersectSets(Set<T>& other)
  96.       {
  97.           Set<T> result;
  98.           Node<T> *current = this->head;
  99.           while (current != nullptr)
  100.           {
  101.               if (other.containsElement(current->data))
  102.               {
  103.                 result.addElement(current->data);
  104.               }
  105.               current = current->next;
  106.           }
  107.  
  108.           return result;
  109.       }
  110.  
  111.       void printElements()
  112.       {
  113.           Node<T> *current = this->head;
  114.           while (current != nullptr)
  115.           {
  116.               cout << current->data << " ";
  117.               current = current->next;
  118.           }
  119.           cout << endl;
  120.       }
  121. };
  122.  
  123.  
  124.  
  125.  
  126. int main()
  127. {
  128.     Set<int> s1, s2, s3;
  129.     s1.addElement(1);
  130.     s1.addElement(2);
  131.     s1.addElement(3);
  132.     s2.addElement(3);
  133.     s2.addElement(4);
  134.     s2.addElement(5);
  135.     s1.printElements();
  136.     s2.printElements();
  137.     s3 = s1.intersectSets(s2);
  138.     s3.printElements();
  139.     return 0;
  140. }
  141.  
RAW Paste Data