gashink_t

списки(классы)

Apr 17th, 2020
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.26 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. template<typename T>
  7. class list
  8. {
  9. public:
  10.     list();
  11.     ~list();
  12.     void add(T data);// добавление в список
  13.     int getsize(); // размер
  14.     void point(); //указание выделенного элемента
  15.     int search(int i); //вызов определенного элемента списка
  16.  
  17. private:
  18.     template<typename T>
  19.     class node
  20.     {
  21.     public:
  22.         node* next;// следущий элемент списка
  23.         T data;// данные
  24.         node* null_element; // указатель на выделенный элемент
  25.         node(T data = T(), node* next = nullptr, node* null_element = nullptr)
  26.         {
  27.             this->data = data;
  28.             this->next = next;
  29.             this->null_element = null_element;
  30.         }
  31.     };
  32.     int size; //кол-во элементов в списке
  33.     node<int> *head; //голова списка  
  34. };
  35.  
  36. template<typename T>
  37. list<T>::list()
  38. {
  39.     size = 0;
  40.     head = nullptr;
  41. }
  42.  
  43. template<typename T>
  44. list<T>::~list()
  45. {
  46. }
  47.  
  48. template<typename T>
  49. void list<T>::add(T data)
  50. {
  51.     if (head == nullptr) //если первый элемент
  52.         head = new node<T>(data);
  53.     else {
  54.         node<T>* c = this->head;
  55.         while (c->next != nullptr) { //пока не конец списка
  56.             c = c->next;
  57.         }
  58.         c->next = new node<T>(data);
  59.     }
  60.     size++;
  61. }
  62.  
  63. template<typename T>
  64. int list<T>::getsize()
  65. {
  66.     return size;
  67. }
  68.  
  69. template<typename T>
  70. void list<T>::point()
  71. {
  72.     node<int>* c = this->head;
  73.     for (int i = 0;i < getsize() - 1;i++)
  74.         c = c->next; //указатель на последнее число
  75.     node<int>* temp = this->head;
  76.     for (int i = 0; i < getsize() - 1; i++) { // заполнение поля null_element
  77.         temp->null_element = c;
  78.         temp = temp->next;
  79.     }
  80.     temp = this->head;
  81.     //* Проверка заполнения пля <<null_element>> *//
  82.     cout << "\nCheck fied filling <<null_element>>: \n";
  83.     for (int i = 0; i < getsize() - 1; i++) {
  84.         c = temp->null_element;
  85.         cout << i << ")" << c->data << endl;
  86.         temp = temp->next;
  87.     }
  88.     cout << "End of check.\n" << endl;
  89. }
  90.  
  91. template<typename T>
  92. int list<T>::search(int i)
  93. {
  94.     node<int>* c = this->head;
  95.     int count=0;
  96.     while (c->next != nullptr) {
  97.         if (count == i)
  98.             return c->data;
  99.         c = c->next;
  100.         count++;
  101.     }
  102.     if (c->next == nullptr)
  103.         return c->data;
  104. }
  105.  
  106.  
  107. int main() {
  108.     int a=1,i; // a - вводимые элементы, i - счетчик
  109.     list<int> lst;
  110.     while (a!=0) {
  111.         cout << "Enter a new element: " << endl;
  112.         cin >> a;
  113.         if (a != 0) lst.add(a);
  114.     }
  115.     cout << "Number of element: N = " << lst.getsize() << endl;
  116.     lst.point();
  117.     cout << "Yout list: " << endl;
  118.     for (i = 0; i < lst.getsize() - 1; i++)
  119.         cout << lst.search(i) << " -> ";
  120.     cout << lst.search(lst.getsize() - 1) << endl;
  121.     cout << "Which elembent item do you want to see?  " << endl;
  122.     cin >> a;
  123.     cout << "Elment number " << a << " = " << lst.search(a);
  124.     return 0;
  125. }
Add Comment
Please, Sign In to add comment