Advertisement
MeehoweCK

Untitled

Oct 22nd, 2020
2,040
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.63 KB | None | 0 0
  1. // lista.hpp
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. template <class T>
  7. struct element_listy
  8. {
  9.     T wartosc;
  10.     element_listy* next;
  11.     element_listy* prev;
  12. };
  13.  
  14. template <class T>
  15. class Lista
  16. {
  17.     element_listy<T>* head;
  18.     //element_listy<T>* last;
  19.     unsigned rozmiar;
  20. public:
  21.     Lista();
  22.     ~Lista();
  23.     unsigned size() const {return rozmiar;}
  24.     void dodaj_na_koniec(T);
  25.     void clear();
  26.     int szukaj(T);
  27.     void usun_element(unsigned);
  28.     void usun_pierwszy();
  29.     void usun_ostatni();
  30.     void wypisz();
  31. };
  32.  
  33. template <class T>
  34. Lista<T>::Lista() : head(nullptr), rozmiar(0) {}
  35.  
  36. template <class T>
  37. Lista<T>::~Lista()
  38. {
  39.     element_listy<T>* temp;
  40.     element_listy<T>* pretemp;
  41.  
  42.     while(head)
  43.     {
  44.         temp = head;
  45.  
  46.         // przechodzimy na koniec listy:
  47.         while(temp->next)
  48.         {
  49.             pretemp = temp;
  50.             temp = temp->next;
  51.         }
  52.         delete temp;
  53.         pretemp->next = nullptr;
  54.  
  55.         if(pretemp == head)     // zostaje ostatni element
  56.         {
  57.             delete head;
  58.             head = nullptr;
  59.             cout << "Usunieto element\n";
  60.         }
  61.         cout << "Usunieto element\n";
  62.     }
  63.     cout << "Koniec destruktora\n";
  64. }
  65.  
  66. template <class T>
  67. void Lista<T>::dodaj_na_koniec(T value)
  68. {
  69.     element_listy<T>* nowy = new element_listy<T>;
  70.     nowy->wartosc = value;
  71.     nowy->next = nullptr;
  72.  
  73.     // pierwszy element listy:
  74.     if(head == nullptr)
  75.     {
  76.         head = nowy;
  77.         head->prev = nullptr;
  78.         cout << "dodano wartosc " << head->wartosc << endl;
  79.     }
  80.  
  81.     else
  82.     {
  83.         element_listy<T>* temp = head;
  84.         while(temp->next)
  85.             temp = temp->next;
  86.  
  87.         nowy->prev = temp;
  88.         temp->next = nowy;
  89.         cout << "dodano wartosc " << temp->next->wartosc << endl;
  90.     }
  91.  
  92.     ++rozmiar;
  93. }
  94.  
  95. template <class T>
  96. void Lista<T>::clear()
  97. {
  98.     element_listy<T>* temp;
  99.     element_listy<T>* pretemp;
  100.  
  101.     while(head)
  102.     {
  103.         temp = head;
  104.  
  105.         // przechodzimy na koniec listy:
  106.         while(temp->next)
  107.         {
  108.             pretemp = temp;
  109.             temp = temp->next;
  110.         }
  111.         delete temp;
  112.         pretemp->next = nullptr;
  113.  
  114.         if(pretemp == head)     // zostaje ostatni element
  115.         {
  116.             delete head;
  117.             head = nullptr;
  118.         }
  119.     }
  120.     rozmiar = 0;
  121. }
  122.  
  123. template <class T>
  124. int Lista<T>::szukaj(T value)
  125. {
  126.     if(head->wartosc == value)
  127.         return 0;
  128.  
  129.     element_listy<T>* temp = head->next;
  130.  
  131.     if(temp)
  132.     for(int i = 1; i < rozmiar; ++i)
  133.     {
  134.         if(temp->wartosc == value)
  135.             return i;
  136.         temp = temp->next;
  137.     }
  138.     return -1;
  139. }
  140.  
  141. template <class T>
  142. void Lista<T>::usun_element(unsigned nr)
  143. {
  144.     if(nr == 0)
  145.     {
  146.         element_listy<T>* temp = head->next;
  147.         delete head;
  148.         head = temp;
  149.         --rozmiar;
  150.         return;
  151.     }
  152.  
  153.     element_listy<T>* kasowany = head;
  154.     for(unsigned i = 0; i < nr; ++i)
  155.         kasowany = kasowany->next;
  156.  
  157.     element_listy<T>* temp_next = kasowany->next;
  158.     element_listy<T>* temp_prev = kasowany->prev;
  159.  
  160.     temp_prev->next = temp_next;
  161.     temp_next->prev = temp_prev;
  162.  
  163.     delete kasowany;
  164.     --rozmiar;
  165. }
  166.  
  167. //void usun_pierwszy();
  168. //void usun_ostatni();
  169.  
  170. template <class T>
  171. void Lista<T>::wypisz()
  172. {
  173.     cout << "Rozmiar listy: " << rozmiar << endl;
  174.     cout << "Adresy komórek i dane:\n";
  175.  
  176.     element_listy<T>* temp = head;
  177.  
  178.     for(unsigned i = 0; i < rozmiar; ++i)
  179.     {
  180.         cout << '\t' << i << ": " << temp << '\t' << temp->wartosc << endl;
  181.         temp = temp->next;
  182.     }
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement