Advertisement
Guest User

Kopiecyk dla Krzysia

a guest
Nov 21st, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.97 KB | None | 0 0
  1. //ALGO2 IS1 211A LAB04
  2. //Jakub Ogryzek
  3. //oj44443@zut.edu.pl
  4. #include "pch.h"
  5. #include <iostream>
  6. #include <ctime>
  7. #include <time.h>
  8. #include <iomanip>
  9. #include <string>
  10. #include <cstdlib>
  11. #include <memory>
  12. #include <string>
  13.  
  14. using namespace std;
  15.  
  16. template <typename T>
  17. class Heap {
  18. public:
  19.     T *data = new T[capacity];
  20.     int capacity;
  21.     int size;
  22.     Heap()
  23.     {
  24.         size = 0;
  25.         capacity = 1;
  26.         data = new T[capacity];
  27.     }
  28.     ~Heap()
  29.     {
  30.         delete[] data;
  31.         data = nullptr;
  32.         size = 0;
  33.         capacity = 0;
  34.     }
  35.  
  36.     int Push(int size)
  37.     {
  38.         if (size == 0)
  39.             return 0;
  40.         int parent_index = parent(size);
  41.         if (parent_index == -1000)
  42.             return 0;
  43.         if (data[size] <= data[parent_index])
  44.             return 0;
  45.         else {
  46.             swap(data[size], data[parent_index]);
  47.             Push(parent_index);
  48.         }
  49.     }
  50.  
  51.     void AddNewElement(const T&input)
  52.     {
  53.         size = size + 1;
  54.         if (size <= capacity) {
  55.             data[size-1] = input;
  56.         }
  57.         if (size > capacity)
  58.         {
  59.             capacity = capacity * 2;
  60.             T *temp = new T[capacity];
  61.             for (int i = 0; i < size - 1; i++)
  62.             {
  63.                 temp[i] = move(data[i]);
  64.             }
  65.             temp[size - 1] = input;
  66.             delete[] data;
  67.             data = temp;
  68.         }
  69.         Push(size - 1);
  70.     }
  71.  
  72.     void swap(T x, T y)
  73.     {
  74.         T temp;
  75.         temp = x;
  76.         x = y;
  77.         y = temp;
  78.     }
  79.  
  80.     int parent(int index)
  81.     {
  82.         if (index > 0)
  83.             return (index - 1) / 2;
  84.         else {
  85.             cout << "Rodzic tego elementu nie istnieje" << endl;
  86.             return -1000;
  87.         }
  88.     }
  89.     int left_son(int index)
  90.     {
  91.         if (2 * index + 1 < size)
  92.             return 2 * index + 1;
  93.         else {
  94.             cout << "Ten element nie ma lewego syna" << endl;
  95.             return nullptr;
  96.         }
  97.     }
  98.     int right_son(int index)
  99.     {
  100.         if (2 * index + 2 < size)
  101.             return 2 * index + 2;
  102.         else {
  103.             cout << "Ten element nie ma prawego syna" << endl;
  104.             return nullptr;
  105.         }
  106.     }
  107. };
  108.  
  109. int main()
  110. {
  111.     Heap<int>* heap = new Heap<int>();
  112.     heap->AddNewElement(1); //0
  113.     heap->AddNewElement(2); //1
  114.     heap->AddNewElement(3); //2
  115.     //heap->AddNewElement(4); //3
  116.     //heap->AddNewElement(5); //4
  117.     delete heap;
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement