Guest User

Untitled

a guest
Aug 16th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.69 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template<class T>
  5.  
  6. struct node{                                          //структура узел
  7.     T data;
  8.     node * next;                                        //указатель на следующий узел.
  9.     node(T d){ data =d; next=NULL;}              //конструктор
  10.  
  11. };
  12. template<class T>
  13. class List{
  14.     node<T>* first; node<T>*last;        //указатель на первый и последний узлы соответственно
  15.     int size;                              //количество элементов в списке
  16. public:
  17.     List();
  18.     ~List();
  19.     void push_back(T d);                    //добавление элемента в конец
  20.     template<class T>
  21.     friend ostream& operator <<(ostream& , List<T> &); //перегрузка оператора вывода
  22.     template<class T>
  23.     class iterator{                  //класс Итератор для обращения к элемента списка
  24.         node<T> *p;
  25.     public:
  26.         iterator() {p=NULL;}
  27.         iterator(node<T> *pp) {p=pp;}
  28.         T & operator *(){ return p->data;}
  29.         bool operator == (iterator <T> pp){ if (pp.p==p) return true; else return false;}
  30.         bool operator != (iterator <T> pp){ if (pp.p!=p) return true; else return false;}
  31.         iterator & operator = (node<T> * n){p=n; return *this;}
  32.         node<T>* uk(){return p;}
  33.         iterator & operator ++(){
  34.             p=p->next;
  35.             return *this;
  36.         }
  37.     };
  38.     iterator <T> begin(){                    //итератор, указывающий на начало
  39.         iterator <T> it(first);
  40.         return it;
  41.     }
  42.     iterator <T> end(){                        //итератор, указывающий на конец
  43.         iterator <T> it(last);
  44.         return it;
  45.     }
  46.     iterator<T> find(T key){                   //функция поиска, с помощью которой мы можем получить
  47.             for(iterator<T> it=begin();it!=end();){    //к элементу списка, содерж. ключ key
  48.         if (*it==key) return it;
  49.         ++it;
  50.     }
  51.     return NULL;
  52. }  
  53.  
  54. };
  55. template<class T>
  56. List<T>::List(){
  57.     first=NULL;
  58.     last=NULL;
  59.     size=0;
  60. }
  61. template<class T>
  62. List<T>::~List(){
  63.     node<T>*tmp=first;
  64.     while(tmp!=last){
  65.        
  66.     first=first->next;
  67.     delete tmp;
  68.     tmp=first;
  69.     }
  70.     delete tmp;
  71. }
  72. template<class T>
  73.  
  74. void List<T>::push_back(T d){
  75.     if (first==NULL)
  76.     {
  77.         first=new node<T>(d);
  78.         last=first;
  79.         size++;
  80.     }
  81.     else
  82.     {
  83.         node<T> *tmp=new node<T>(d);
  84.         last->next=tmp;
  85.         size++;
  86.         last=last->next;
  87.     }
  88. }
  89. template<class T>
  90. ostream & operator <<(ostream& out, List<T> &l){
  91.     if (l.first==NULL)
  92.         out<<"NO";
  93.     else
  94.         for(node<T>*tmp=l.first;tmp!=NULL; tmp=tmp->next )
  95.             out<<tmp->data<<endl;
  96.  
  97.     return out;
  98. }
Add Comment
Please, Sign In to add comment