Advertisement
Technoblade777

Nika dlist

May 28th, 2023
831
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.83 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3. struct dlist
  4. {
  5.     int info;
  6.     dlist *prev, *next;
  7. };
  8.  
  9.  
  10.  
  11. int main()
  12. {
  13.     int k = 0;  //проверка на случай наличия одного элемента в спике
  14.     //объявление головы списка
  15.     int x;
  16.     cin >> x; k++;
  17.     dlist *head = new dlist;
  18.     head->info = x;
  19.     head->prev = nullptr; head->next = nullptr;
  20.     dlist *p = new dlist;
  21.     p = head;
  22.  
  23.     //ввод тела списка
  24.     cin >> x;
  25.     while(x!=0)
  26.     {
  27.         k++;
  28.         dlist *r = new dlist;
  29.         r->info = x; r->prev=nullptr; r->next=nullptr;
  30.         p->next = r;
  31.         r->prev=p;
  32.         p = r;
  33.         cin >> x;
  34.     }
  35.  
  36.     if(k==1){cout << "В списке недостаточное количество элементов"; return 0;}
  37.  
  38.     //проверка на убывание
  39.     int f = 1;
  40.     p = head->next;
  41.     while(p!=nullptr)
  42.     {
  43.         if(p->info>=p->prev->info){f = 0; break;}
  44.         p=p->next;
  45.     }
  46.  
  47.     if(f == 1)
  48.     {
  49.         p = head->next;
  50.         while(p!=nullptr)
  51.         {
  52.             if(p->info%5==0&&p->prev->info%5==0)
  53.             {
  54.                 int x = p->info + p->prev->info;
  55.                 dlist *r = new dlist;
  56.                 r->info = x;
  57.                 r->prev = p->prev;
  58.                 r->next = p;
  59.                 p->prev->next = r;
  60.                 p->prev = r;
  61.             }
  62.             p = p->next;
  63.         }
  64.     }
  65.     else {
  66.         int a, b;
  67.         cout << "a: ";
  68.         cin >> a;
  69.         cout << "b: ";
  70.         cin >> b;
  71.         p = head;
  72.         while (p != nullptr) {
  73.             if (p->next == nullptr) { break; }
  74.             if (p->info >= a && p->info <= b) {
  75.                 dlist *r;
  76.                 if (p->next->next != nullptr) //... p y z NULL
  77.                 {
  78.                     r = p->next;
  79.                     p->next = p->next->next;
  80.                     p->next->prev = p;
  81.                     r->next = nullptr;
  82.                     r->prev = nullptr;
  83.                     delete r;
  84.                     p = p->next;
  85.                 } else if (p->next != nullptr)//... p y NULL
  86.                 {
  87.                     r = p->next;
  88.                     p->next = nullptr;
  89.                     r->next = nullptr;
  90.                     r->prev = nullptr;
  91.                     delete r;
  92.                     p = p->next;
  93.                 } else {
  94.                     p = p->next;
  95.                 }
  96.             } else {
  97.                 p = p->next;
  98.             }
  99.         }
  100.     }
  101.     //вывод списка
  102.     p = head;
  103.     while(p!=nullptr)
  104.     {
  105.         cout << p->info << " ";
  106.         p = p->next;
  107.     }
  108.  
  109.     //удаление списка
  110.     while(head!=nullptr)
  111.     {
  112.         dlist *r = head;
  113.         head = head->next;
  114.         delete r;
  115.     }
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement