MeehoweCK

Untitled

Oct 22nd, 2020
597
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. struct element_listy
  7. {
  8.     T wartosc;
  9.     element_listy* next; // wskaŸnik na nastêpny element
  10.     element_listy* prev;
  11. };
  12.  
  13. template <class T>
  14. class Lista
  15. {
  16.     element_listy<T>* head; // wskaŸnik na pocz¹tek listy
  17.     unsigned rozmiar;
  18. public:
  19.     Lista();
  20.     ~Lista();
  21.     unsigned size() const { return rozmiar; }
  22.     void clear();
  23.     void dodaj_na_koniec(T);
  24.     void dodaj_na_miejsce(T, unsigned);
  25.     void dodaj_na_poczatek(T);
  26.     void usun_element(unsigned);
  27.     void usun_pierwszy();
  28.     void usun_ostatni();
  29.     void wyswietl_liste();
  30.     void zmien_wartosc(unsigned, T);
  31.     T pobierz_wartosc(unsigned);
  32. };
  33.  
  34. template <class T>
  35. Lista<T>::Lista() : head(nullptr), rozmiar(0) {}
  36.  
  37. template <class T>
  38. Lista<T>::~Lista()
  39. {
  40.     element_listy<T>* temp;
  41.     element_listy<T>* pretemp;
  42.  
  43.     while(head)
  44.     {
  45.         temp = head;
  46.  
  47.         while(temp->next)
  48.         {
  49.             pretemp = temp;
  50.             temp = temp->next;
  51.         }
  52.         delete temp;
  53.         pretemp->next = nullptr;
  54.         if (pretemp == head)
  55.         {
  56.             delete head;
  57.             head = nullptr;
  58.             cout << "Usunieto element\n";
  59.         }
  60.         cout << "Usunieto element\n";
  61.     }
  62.     cout << "Koniec destruktora\n";
  63. }
  64.  
  65. template <class T>
  66. void Lista<T>::clear()
  67. {
  68.     element_listy<T>* temp;
  69.     element_listy<T>* pretemp;
  70.  
  71.     while(head)
  72.     {
  73.         temp = head;
  74.  
  75.         while(temp->next)
  76.         {
  77.             pretemp = temp;
  78.             temp = temp->next;
  79.         }
  80.         delete temp;
  81.         pretemp->next = nullptr;
  82.         if (pretemp == head)
  83.         {
  84.             delete head;
  85.             head = nullptr;
  86.         }
  87.     }
  88.     rozmiar = 0;
  89. }
  90.  
  91. template <class T>
  92. void Lista<T>::dodaj_na_koniec(T value)
  93. {
  94.     element_listy<T>* nowy = new element_listy<T>;
  95.     nowy->wartosc = value;
  96.     nowy->next = nullptr;
  97.  
  98.     // pierwszy element listy:
  99.     if(head == nullptr)
  100.     {
  101.         head = nowy;
  102.         head->prev = nullptr;
  103.         cout << "dodano wartosc " << head->wartosc << endl;
  104.     }
  105.  
  106.     // ju¿ istnieje pierwszy element:
  107.     else
  108.     {
  109.         element_listy<T>* temp = head;
  110.         while(temp->next)
  111.         {
  112.             temp = temp->next;
  113.         }
  114.  
  115.         temp->next = nowy;
  116.         temp->next->prev = temp;
  117.         cout << "dodano wartosc " << temp->next->wartosc << endl;
  118.     }
  119.  
  120.     ++rozmiar;
  121. }
  122.  
  123. template <class T>
  124. void Lista<T>::dodaj_na_miejsce(T value, unsigned nr)
  125. {
  126.  
  127. }
  128.  
  129. template <class T>
  130. void Lista<T>::dodaj_na_poczatek(T value)
  131. {
  132.  
  133. }
  134.  
  135. template <class T>
  136. void Lista<T>::usun_element(unsigned nr)
  137. {
  138.     if(nr == 0)
  139.     {
  140.         element_listy<T>* temp = head->next;
  141.         delete head;
  142.         head = temp;
  143.         --rozmiar;
  144.         return;
  145.     }
  146.  
  147.     element_listy<T>* kasowany = head;
  148.     for(unsigned i = 0; i < nr; ++i)
  149.         kasowany = kasowany->next;
  150.  
  151.     element_listy<T>* temp_next = kasowany->next;
  152.     element_listy<T>* temp_prev = kasowany->prev;
  153.  
  154.     temp_prev->next = temp_next;
  155.     temp_next->prev = temp_prev;
  156.     delete kasowany;
  157.     --rozmiar;
  158. }
  159.  
  160. template <class T>
  161. void Lista<T>::usun_pierwszy()
  162. {
  163.     usun_element(0);
  164. }
  165.  
  166. template <class T>
  167. void Lista<T>::usun_ostatni()
  168. {
  169.     usun_element(rozmiar - 1);
  170. }
  171.  
  172. template <class T>
  173. void Lista<T>::wyswietl_liste()
  174. {
  175.     element_listy<T>* temp = head;
  176.  
  177.     while(temp)
  178.     {
  179.         cout << temp->wartosc << '\t';
  180.         temp = temp->next;
  181.     }
  182.     cout << endl;
  183. }
  184.  
  185. template <class T>
  186. void Lista<T>::zmien_wartosc(unsigned nr, T value)
  187. {
  188.  
  189. }
  190.  
  191. template <class T>
  192. T Lista<T>::pobierz_wartosc(unsigned nr)
  193. {
  194.  
  195. }
RAW Paste Data