Guest User

Untitled

a guest
Dec 11th, 2019
91
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5.  
  6. class Node
  7. {
  8.   char *stroka;
  9.   int size;
  10.   class Node *ptr;
  11.   friend class List;
  12. };
  13.  
  14. class List
  15. {
  16.   Node *head;    // Корень списка
  17.   int count = 0; // Количество узлов списка
  18.   Node* Prev(Node *); // Переход к предыдущему узлу (не интерфейсный метод)
  19. public:
  20.   List() { head = NULL; } // Инициализация списка
  21.   int getCount() { return count; } // Получение количества узлов списка
  22.   bool isEmpty() { return head == NULL; }  // Проверка, пуст ли список
  23.   Node* getFirst() { return head; } // Получение корневого узла списка
  24.   Node* getLast();      // Получение последнего узла списка
  25.   void Clear();        // Очистка списка
  26.   Node* Next(Node *);      // Переход к следующему узлу
  27.   Node* Add(char*, int, Node*);    // Добавление узла списка
  28.   Node* Delete(Node*);    // Удаление узла списка
  29.   void Print();        // Вывод значений узлов списка
  30.   void sortb(int(*)(char *, char *, int ,int))
  31. };
  32.  
  33.  
  34. Node* List::Add(char *num, int size1, Node* node = NULL)
  35. {
  36.   Node *elem = new Node();
  37.   elem->stroka = num;
  38.   elem->size = size1;
  39.   count++;
  40.   if (node == NULL) // Добавление нового корня
  41.   {
  42.     if (head == NULL) {
  43.       elem->ptr = NULL;
  44.       head = elem;
  45.     }
  46.     else {
  47.       elem->ptr = head;
  48.       head = elem;
  49.     }
  50.     return elem;
  51.   }
  52.   elem->ptr = node->ptr; // Добавление узла после текущего
  53.   node->ptr = elem;
  54.   return elem;
  55. }
  56.  
  57. Node* List::Delete(Node* node)
  58. {
  59.   if (node == NULL) { return NULL; } // В списке нет узлов
  60.   count--;
  61.   if (node == head)  // Удаление корневого узла
  62.   {
  63.     head = node->ptr;
  64.     delete node;
  65.     return head;
  66.   }
  67.   Node* prev = Prev(node); // Удаление промежуточного узла
  68.   prev->ptr = node->ptr;
  69.   delete node;
  70.   return prev;
  71. }
  72.  
  73. Node* List::Next(Node* node)
  74. {
  75.   if (isEmpty()) return NULL;
  76.   return node->ptr;
  77. }
  78.  
  79. Node* List::getLast()
  80. {
  81.   Node* p = head;
  82.   while (Next(p) != NULL)
  83.     p = Next(p);
  84.   return p;
  85. }
  86.  
  87.  
  88. Node* List::Prev(Node* node)
  89. {
  90.   if (isEmpty()) return NULL;
  91.   if (node == head) return NULL;
  92.   Node *p = head;
  93.   while (p->ptr != node)
  94.     p = p->ptr;
  95.   return p;
  96. }
  97.  
  98. void List::Clear()
  99. {
  100.   class Node *p = head;
  101.   if (p == NULL) return;
  102.   do {
  103.     Node *d = p;
  104.     p = Next(p);
  105.     delete d;
  106.   } while (p != NULL);
  107.   count = 0;
  108.   head = NULL;
  109. }
  110.  
  111. void List::Print()
  112. {
  113.   if (isEmpty()) { cout << "Списо" << endl; return; }
  114.   Node *p = head;
  115.   do {
  116.     for(int i=0;i<(*p).size;i++){
  117.       cout << (*p).stroka[i];
  118.     }
  119.     p = Next(p);
  120.   } while (p != NULL);
  121.   cout << endl;
  122. }
  123.  
  124.  
  125. void List::sortb(   bool (*comparisonFcn)(int, int);) {
  126.    bool sorted = false;
  127.    while (!sorted) {
  128.       sorted = true;
  129.       for (int i = 0; i < n-1; i++) {
  130.         if (a[i] > a[i+1]) {
  131.            int tmp = a[i];
  132.            a[i] = a[i+1];
  133.            a[i+1] = tmp;
  134.            sorted = false;
  135.         }
  136.       }
  137.    
  138.  
  139.  
  140. int main(void)
  141. {
  142.     List list;
  143.     Node *s = list.getLast();
  144.     for (int i = 0; i < 10; i++) {
  145.         //cout << "Enter size" << endl;
  146.         int k;
  147.         cin >> k;
  148.         char *t = new char[k];
  149.         //cout << "Enter string" << endl;
  150.         for(int j=0;j<k;j++){
  151.             cin >> t[j];
  152.         }
  153.         s = list.Add(t,k,s);
  154.   }
  155.   list.Print();
  156.   Node *g = list.getFirst();
  157.   g = list.Next(g);
  158.   g = list.Next(g);
  159.   g = list.Delete(g);
  160.   g = list.Delete(g);
  161.  
  162.   list.Print();
  163.  
  164.   return 0;
  165. }
RAW Paste Data