Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // lista.hpp
- #include <iostream>
- using namespace std;
- template <class T>
- struct element_listy
- {
- T wartosc;
- element_listy* next;
- element_listy* prev;
- };
- template <class T>
- class Lista
- {
- element_listy<T>* head;
- //element_listy<T>* last;
- unsigned rozmiar;
- public:
- Lista();
- ~Lista();
- unsigned size() const {return rozmiar;}
- void dodaj_na_koniec(T);
- void clear();
- int szukaj(T);
- void usun_element(unsigned);
- void usun_pierwszy();
- void usun_ostatni();
- void wypisz();
- };
- template <class T>
- Lista<T>::Lista() : head(nullptr), rozmiar(0) {}
- template <class T>
- Lista<T>::~Lista()
- {
- element_listy<T>* temp;
- element_listy<T>* pretemp;
- while(head)
- {
- temp = head;
- // przechodzimy na koniec listy:
- while(temp->next)
- {
- pretemp = temp;
- temp = temp->next;
- }
- delete temp;
- pretemp->next = nullptr;
- if(pretemp == head) // zostaje ostatni element
- {
- delete head;
- head = nullptr;
- cout << "Usunieto element\n";
- }
- cout << "Usunieto element\n";
- }
- cout << "Koniec destruktora\n";
- }
- template <class T>
- void Lista<T>::dodaj_na_koniec(T value)
- {
- element_listy<T>* nowy = new element_listy<T>;
- nowy->wartosc = value;
- nowy->next = nullptr;
- // pierwszy element listy:
- if(head == nullptr)
- {
- head = nowy;
- head->prev = nullptr;
- cout << "dodano wartosc " << head->wartosc << endl;
- }
- else
- {
- element_listy<T>* temp = head;
- while(temp->next)
- temp = temp->next;
- nowy->prev = temp;
- temp->next = nowy;
- cout << "dodano wartosc " << temp->next->wartosc << endl;
- }
- ++rozmiar;
- }
- template <class T>
- void Lista<T>::clear()
- {
- element_listy<T>* temp;
- element_listy<T>* pretemp;
- while(head)
- {
- temp = head;
- // przechodzimy na koniec listy:
- while(temp->next)
- {
- pretemp = temp;
- temp = temp->next;
- }
- delete temp;
- pretemp->next = nullptr;
- if(pretemp == head) // zostaje ostatni element
- {
- delete head;
- head = nullptr;
- }
- }
- rozmiar = 0;
- }
- template <class T>
- int Lista<T>::szukaj(T value)
- {
- if(head->wartosc == value)
- return 0;
- element_listy<T>* temp = head->next;
- if(temp)
- for(int i = 1; i < rozmiar; ++i)
- {
- if(temp->wartosc == value)
- return i;
- temp = temp->next;
- }
- return -1;
- }
- template <class T>
- void Lista<T>::usun_element(unsigned nr)
- {
- if(nr == 0)
- {
- element_listy<T>* temp = head->next;
- delete head;
- head = temp;
- --rozmiar;
- return;
- }
- element_listy<T>* kasowany = head;
- for(unsigned i = 0; i < nr; ++i)
- kasowany = kasowany->next;
- element_listy<T>* temp_next = kasowany->next;
- element_listy<T>* temp_prev = kasowany->prev;
- temp_prev->next = temp_next;
- temp_next->prev = temp_prev;
- delete kasowany;
- --rozmiar;
- }
- //void usun_pierwszy();
- //void usun_ostatni();
- template <class T>
- void Lista<T>::wypisz()
- {
- cout << "Rozmiar listy: " << rozmiar << endl;
- cout << "Adresy komórek i dane:\n";
- element_listy<T>* temp = head;
- for(unsigned i = 0; i < rozmiar; ++i)
- {
- cout << '\t' << i << ": " << temp << '\t' << temp->wartosc << endl;
- temp = temp->next;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement