Advertisement
AlexandrTalchuk

Untitled

Apr 13th, 2020
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.25 KB | None | 0 0
  1. #include <iostream>
  2. #include "windows.h"
  3. #include <fstream>
  4. using namespace std;
  5.  
  6. struct list
  7. {
  8.     int info;
  9.     list* next, *prev;
  10. };
  11.  
  12.  
  13. void Create(list*& head, list*& end);
  14. void Add(list*& head, list*& end);
  15. void Add_end(list*& end, int inf);
  16. void Add_head(list*& head, int inf);
  17. void Del_el(list*& head);
  18. void Delete(list*& head);
  19. void View(list*& head, list*& end);
  20. void View_head(list*& head);
  21. void View_end(list*& end);
  22. void Solution(list*& head, list*& end, list*& Even_head, list*& Even_end, list*& Odd_head, list*& Odd_end);
  23.  
  24. int main()
  25. {
  26.     setlocale(LC_ALL, "rus");
  27.     list* head = nullptr;
  28.     list* end = nullptr;
  29.     list* Even_head = nullptr;
  30.     list* Even_end = nullptr;
  31.     list* Odd_head = nullptr;
  32.     list* Odd_end = nullptr;
  33.  
  34.     int choice,info=0;
  35.     while (true)
  36.     {
  37.         cout << " 1. Создание\n 2. Добавление\n 3. Удаление\n 4. Просмотр \n 5. Сортировка\n 6. Выход" << endl;
  38.         cin >> choice;
  39.         switch (choice)
  40.         {
  41.         case 1:
  42.             Create(head, end);
  43.             Sleep(1000);
  44.             system("cls");
  45.             break;
  46.         case 2:
  47.             Add(head, end);
  48.             Sleep(1000);
  49.             system("cls");
  50.             break;
  51.         case 3:
  52.             Del_el(head);
  53.             Sleep(1000);
  54.             system("cls");
  55.             break;
  56.         case 4:
  57.             View(head,end);
  58.             Sleep(1000);
  59.             system("cls");
  60.             break;
  61.         case 5:
  62.  
  63.             Solution(head,end,Even_head,Even_end,Odd_head,Odd_end);
  64.             cout << "Четные" << endl;
  65.             View(Even_head, Even_end);
  66.             cout << "Нечетные" << endl;
  67.             View(Odd_head, Odd_end);
  68.             Sleep(3000);
  69.             system("cls");
  70.             break;
  71.         case 6:
  72.             Delete(head);
  73.             Delete(end);
  74.             exit(0);
  75.             break;
  76.         default:
  77.             cout << "Повторите еще раз" << endl;
  78.             break;
  79.         }
  80.     }
  81. }
  82.  
  83. void Create(list*& head, list*& end)
  84. {
  85.     if (head == NULL)
  86.     {
  87.         int kolvo, i, info;
  88.         cout << "Введите количество элементов" << endl;
  89.         cin >> kolvo;
  90.         if (cin.fail() || kolvo < 0)
  91.         {
  92.             cout << "Условия ввода не соблюдены" << endl;
  93.             return;
  94.         }
  95.         cout << "1-ый " ;
  96.         cin >> info;
  97.         list* t = new list;
  98.         t->info = info;
  99.         t->next = head;
  100.         t->prev = end;
  101.         head = end = t;
  102.         for (i = 1; i < kolvo; i++)
  103.         {
  104.             cout << i + 1 << "-ый ";
  105.             cin >> info;
  106.             Add_end(end, info);
  107.         }
  108.     }
  109.     else
  110.         cout << "Список уже создан" << endl;
  111. }
  112.  
  113. void Add(list*& head, list*& end)
  114. {
  115.     cout << " 1.Добавить элемент в начало списка\n 2.Добавить элемент в конец списка" << endl;
  116.     int u,element;
  117.     cin >> u;
  118.     switch (u)
  119.     {
  120.     case 1:
  121.         cout << "Введите добавляемый элемент" << endl;
  122.         cin >> element;
  123.         Add_head(head, element);
  124.         break;
  125.     case 2:
  126.         cout << "Введите добавляемый элемент" << endl;
  127.         cin >> element;
  128.         Add_end(end, element);
  129.         break;
  130.     default:
  131.         cout << "Данный символ ввести невозможно" << endl;
  132.         break;
  133.     }
  134. }
  135.  
  136. void Add_end(list*& end, int inf)
  137. {
  138.     list* t = new list;
  139.     t->info = inf;
  140.     t->next = NULL;
  141.     t->prev = end;
  142.     end->next = t;
  143.     end = t;
  144. }
  145.    
  146. void Add_head(list*&head,int inf)
  147. {
  148.     list* t = new list;
  149.     t->prev = NULL;
  150.     t->info = inf;
  151.     t->next = head;
  152.     head->prev = t;
  153.     head = t;
  154. }
  155.  
  156. void Del_el(list*& head)
  157. {
  158.     if (head != NULL)
  159.     {
  160.         list* t = nullptr;
  161.         t = head;
  162.         head = head->next;
  163.         delete t;
  164.  
  165.     }
  166. }
  167.  
  168. void Delete(list*& head)
  169. {
  170.     list* t = nullptr;
  171.     while (head!= NULL)
  172.     {
  173.         t =head;
  174.         head = head->next;
  175.         delete t;
  176.  
  177.     }
  178. }
  179.  
  180. void View(list*& head, list*& end)
  181. {
  182.  
  183.     if (head == NULL)
  184.     {
  185.         cout << "Список пуст!" << endl;
  186.         return;
  187.     }
  188.     cout << "\n 1. Просмотр списка сначала\n 2. Просмотр списка с конца" << endl;
  189.     int r;
  190.     cin >> r;
  191.     switch (r)
  192.     {
  193.      case 1:
  194.          View_head(head);
  195.         break;
  196.      case 2:
  197.          View_end(end);
  198.         break;
  199.      default:
  200.         cout << "Значение введено неправильно" << endl;
  201.         return;
  202.     }
  203. }
  204.  
  205. void View_head(list*& head)
  206. {
  207.     list* t =head;
  208.     while (t != NULL)
  209.     {
  210.         cout << "Элемент равен " << t->info << endl;
  211.         t = t->next;
  212.     }
  213. }
  214.  
  215. void View_end(list*& end)
  216. {
  217.     list* t =end;
  218.     while (t != NULL)
  219.     {
  220.         cout << "Элемент равен " << t->info << endl;
  221.         t = t->prev;
  222.     }
  223. }
  224.  
  225. void Solution(list*& head, list*& end,list*& Even_head,list*& Even_end,list*& Odd_head,list*& Odd_end)
  226. {
  227.     list* current = head;
  228.     list* t1 = new list;
  229.     list* t2 = new list;
  230.     list* t3 = new list;
  231.     t1->prev = NULL;
  232.     t1->next = NULL;
  233.     t2->prev = NULL;
  234.     t2->next = NULL;
  235.     t3->prev = NULL;
  236.     t3->next = NULL;
  237.     Even_head = Even_end = t1;
  238.     Odd_head = Odd_end = t2;
  239.     head = end = t3;
  240.  
  241.     while (current != nullptr)
  242.     {
  243.         if (current->info %2==0)
  244.         {
  245.             list* tmp = current;
  246.             tmp->info = current->info;
  247.             current = current->next;
  248.             tmp->next = NULL;
  249.             tmp->prev = Even_end;
  250.             Even_end->next = tmp;
  251.             Even_end = tmp;
  252.  
  253.         }
  254.         else
  255.         {
  256.             list* tmp = current;
  257.             tmp->info = current->info;
  258.             current = current->next;
  259.             tmp->next = NULL;
  260.             tmp->prev = Odd_end;
  261.             Odd_end->next = tmp;
  262.             Odd_end = tmp;
  263.  
  264.         }
  265.        
  266.     }
  267.     list* t = Even_head;
  268.     Even_head = Even_head->next;
  269.     delete t;
  270.     list* tt = Odd_head;
  271.     Odd_head = Odd_head->next;
  272.     delete tt;
  273.     list* f = head;
  274.     head = (head)->next;
  275.     delete f;
  276.    
  277. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement