tranerius

26. Односвязный список

Feb 14th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.57 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. template<typename T>
  5. class line {
  6.  
  7.  
  8.     template<typename T>
  9.     class element {
  10.     public:
  11.         T data;
  12.         element<T> *next_element;
  13.         element(T data = T(), element<T> *next_element = nullptr) {
  14.             this->data = data;
  15.             this->next_element = next_element;
  16.         }
  17.     };
  18.  
  19.  
  20.     element<T> *first_element;
  21.     unsigned int Size;
  22. public:
  23.  
  24.  
  25.     line() {
  26.         Size = 0;
  27.         first_element = nullptr;
  28.     }
  29.  
  30.  
  31.     int size() {
  32.         return Size;
  33.     }
  34.  
  35.     void push_back(T data) {
  36.         if (first_element == nullptr) {
  37.             first_element = new element<T>(data);
  38.         }
  39.         else {
  40.             element <T> *temp_adress = first_element;
  41.             while (!(temp_adress->next_element == nullptr)) {
  42.                 temp_adress = temp_adress->next_element;
  43.             }
  44.             temp_adress->next_element = new element<T>(data);
  45.         }
  46.         Size++;
  47.     }
  48.  
  49.  
  50.     T& operator[](const unsigned int index) {
  51.         unsigned int Count = 0;
  52.         element<T> *temp_adress = first_element;
  53.         while (temp_adress->next_element != nullptr) {
  54.             if (Count == index) {
  55.                 break;
  56.             }
  57.             temp_adress = temp_adress->next_element;
  58.             Count++;
  59.         }
  60.         return temp_adress->data;
  61.     }
  62.  
  63.  
  64.     bool pop_front() {
  65.         if (first_element != nullptr) {
  66.             element<T> *temp_adress = first_element;
  67.             first_element = first_element->next_element;
  68.             delete temp_adress;
  69.             Size--;
  70.             return true;
  71.         }
  72.         else {
  73.             std::cout << "Нечего удалять " << std::endl;
  74.             return false;
  75.         }
  76.     }
  77.  
  78.  
  79.     void clear() {
  80.         while (pop_front());
  81.     }
  82.  
  83.  
  84.     ~line() {
  85.         clear();
  86.     }
  87.  
  88.  
  89.     void push_front(T data) {
  90.         first_element = new element<T>(data, first_element);
  91.         Size++;
  92.     }
  93.  
  94.  
  95.     void pop_back() {
  96.         unsigned int Count = 0;
  97.         element<T> *temp_adress = first_element;
  98.         while (Count != Size - 1) {
  99.             temp_adress = temp_adress->next_element;
  100.             Count++;
  101.         }
  102.         delete temp_adress->next_element;
  103.         temp_adress->next_element = nullptr;
  104.         Size--;
  105.     }
  106.  
  107.  
  108.     void insert(T data, const int index) {
  109.         if (index == 0) {
  110.             push_front(data);
  111.         }
  112.         else {
  113.             unsigned int Count = 0;
  114.             element<T> *temp_adress = first_element;
  115.             while (Count != index - 1) {
  116.                 temp_adress = temp_adress->next_element;
  117.                 Count++;
  118.             }
  119.             element<T> *temp_adress_2 = temp_adress->next_element;
  120.             temp_adress->next_element = new element<T>(data);
  121.             temp_adress->next_element->next_element = temp_adress_2;
  122.             Size++;
  123.         }
  124.     }
  125.  
  126.  
  127.     void removeAt(const int index) {
  128.         if (index == 0) {
  129.             pop_front();
  130.         }
  131.         else if (index != Size - 1) {
  132.             unsigned int Count = 0;
  133.             element<T> *temp_adress = first_element;
  134.             while (Count != index - 1) {
  135.                 temp_adress = temp_adress->next_element;
  136.             }
  137.             element<T> *temp_adress_2 = temp_adress->next_element->next_element;
  138.             delete temp_adress->next_element;
  139.             temp_adress->next_element = temp_adress_2;
  140.             Size--;
  141.         }
  142.         else {
  143.             pop_back();
  144.         }
  145.     }
  146. };
  147.  
  148. int main() {
  149.     setlocale(LC_ALL, "ru");
  150.     line<int> object;
  151.     for (int i = 0; i < 10; i++) {
  152.         object.push_back(i);
  153.     }
  154.     std::cout << "Размер элементов равен " << object.size() << std::endl;
  155.     for (int i = 0; i < object.size(); i++) {
  156.         std::cout << object[i] << " ";
  157.     }
  158.     std::cout << std::endl;
  159.     object.pop_back();
  160.     std::cout << "Размер элементов равен " << object.size() << std::endl;
  161.     for (int i = 0; i < object.size(); i++) {
  162.         std::cout << object[i] << " ";
  163.     }
  164.     std::cout << std::endl;
  165.  
  166.     object.removeAt(1);
  167.     std::cout << "Размер элементов равен " << object.size() << std::endl;
  168.     for (int i = 0; i < object.size(); i++) {
  169.         std::cout << object[i] << " ";
  170.     }
  171.     std::cout << std::endl;
  172.     system("pause");
  173.     return 0;
  174. }
Advertisement
Add Comment
Please, Sign In to add comment