Advertisement
cacodemon665

Лаба 14 Вариант 1

Apr 8th, 2019
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.51 KB | None | 0 0
  1. #include <iostream>
  2. #include <time.h>
  3.  
  4. using namespace std;
  5.  
  6. struct QueueNode
  7. {
  8.     QueueNode* next;
  9.     int value;
  10. };
  11.  
  12. void Add(QueueNode** front, QueueNode** back, int value)
  13. {
  14.     QueueNode* temp = new QueueNode;
  15.     temp->value = value;
  16.     temp->next = nullptr;
  17.  
  18.     if (*front && *back)
  19.     {
  20.         (*back)->next = temp;
  21.         (*back) = temp;
  22.     }
  23.     else
  24.     {
  25.         *front = *back = temp;
  26.     }
  27. }
  28.  
  29. void Print(QueueNode* node)
  30. {
  31.     if (!node)
  32.         return;
  33.  
  34.     cout << node->value << " ";
  35.  
  36.     Print(node->next);
  37. }
  38.  
  39. void DeleteAll(QueueNode* front)
  40. {
  41.     if (front)
  42.     {
  43.         DeleteAll(front->next);
  44.         delete front;
  45.     }
  46. }
  47.  
  48. int main()
  49. {
  50.     QueueNode* front = nullptr, * back = nullptr;
  51.     const int queue_size = 20;
  52.  
  53.     srand(time(0));
  54.  
  55.     for (int i = 0; i < queue_size; i++)
  56.     {
  57.         // Add(&front, &back, rand() % 101 - 50);
  58.  
  59.         int v;
  60.         cin >> v;
  61.  
  62.         Add(&front, &back, v);
  63.     }
  64.  
  65.     Print(front);
  66.     cout << endl;
  67.  
  68.    
  69.     QueueNode* temp = front, *del = nullptr;
  70.  
  71.     // удаляем четные числа в начале очереди
  72.     while (temp && temp->value % 2 == 0)
  73.     {
  74.         del = temp;
  75.    
  76.         temp = temp->next;
  77.         front = temp;
  78.  
  79.         delete del;
  80.     }
  81.  
  82.     // удаляем четные числа в середине очереди и конце
  83.     while (temp)
  84.     {
  85.         if (temp->next && temp->next->value % 2 == 0)
  86.         {
  87.             if (temp->next == back)
  88.             {
  89.                 back = temp;
  90.             }
  91.  
  92.             del = temp->next;
  93.             temp->next = temp->next->next;
  94.             delete del;
  95.         }
  96.         else
  97.         {
  98.             temp = temp->next;
  99.         }
  100.     }
  101.  
  102.     Print(front);
  103.     DeleteAll(front);
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement