Advertisement
Guest User

Untitled

a guest
Nov 19th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.65 KB | None | 0 0
  1. #include <iostream>
  2. #include <pthread.h>
  3. #include <string>
  4. using namespace std;
  5.  
  6. struct element {
  7.     int info;
  8.     element* next;
  9.     element* prev;
  10. };
  11.  
  12. struct dynamic_list {
  13.     element* head;
  14.     element* tail;
  15. };
  16.  
  17. void addElement(dynamic_list& list, int part);
  18. void deleteElement(dynamic_list& list, int number, short mode);
  19. bool checkEmpty(dynamic_list list);
  20. void showList(dynamic_list list);
  21. void findElement(dynamic_list& list, int elem);
  22.  
  23. int main()
  24. {
  25.     int part;
  26.     int number;
  27.     int elem;
  28.     dynamic_list list;
  29.     list.head = NULL;
  30.     list.tail = list.head;
  31.  
  32.     for (int i =0; i < 10; i++)
  33.     {
  34.         cin >> part;
  35.         addElement(list, part);
  36.     }
  37.     showList(list);
  38.  
  39.     int choice;
  40.     cout << "choice";
  41.     cin >> choice;
  42.     while (choice != 5) {
  43.  
  44.         switch (choice) {
  45.             case 1: //Âñòàâêà ýëåìåíòà
  46.                 cout << "Ââåäèòå ÷èñëî:\n";
  47.                 cin >> part;
  48.                 //cout << "\nÊóäà ñëåäóåò âñòàâèòü íîâûé ýëåìåíò? (1 - âî ãëàâó ñïèñêà, 2 - â õâîñò ñïèñêà, 3 - ïåðåä óêàçàííûì, 4 - çà óêàçàííûì)\n";
  49.                 //cin >> mode;
  50.                 //if (mode == 3 || mode == 4) {
  51.                 //  cout << "Óêàæèòå íîìåð ýëåìåíòà:\n";
  52.                 //  cin >> number;
  53.                 //}
  54.                 addElement(list, part);
  55.                 //cout << MENU;
  56.                 cin >> choice;
  57.                 break;
  58.             case 2: //Óäàëåíèå ýëåìåíòà
  59.                 cout << "Êàêîé ýëåìåíò ñëåäóåò óäàëèòü? (1 - ñ ãîëîâû, 2 - ñ õâîñòà, 3 - óêàçàííûé)\n";
  60.                 short mode;
  61.                 cin >> mode;
  62.                 if (mode == 3) {
  63.                     cout << "Óêàæèòå íîìåð ýëåìåíòà:\n";
  64.                     cin >> number;
  65.                 }
  66.                 deleteElement(list, number, mode);
  67.                 //cout << MENU;
  68.                 cin >> choice;
  69.                 break;
  70.             case 3: //Ïîêàçàòü ñïèñîê
  71.                 showList(list);
  72.                 //cout << MENU;
  73.                 cin >> choice;
  74.                 break;
  75.             case 4:
  76.                 cin >> elem;
  77.                 findElement(list, elem);
  78.                 cin >> choice;
  79.                 break;
  80.            
  81.             case 5: //Âûõîä
  82.                 break;
  83.             default:
  84.                 cout << "\aÒðåáóåòñÿ ââåñòè ÷èñëî îò 1 äî 4.\n";
  85.                 //cout << MENU;
  86.                 cin >> choice;
  87.                 break;
  88.         }
  89.     }
  90.  
  91.  
  92.     return 0;  
  93. }
  94.  
  95. void addElement(dynamic_list& list, int part)
  96. {
  97.     element* newElement = new element;
  98.     element* current;
  99.     newElement->info = part;
  100.     newElement->next = NULL;
  101.     newElement->prev = NULL;
  102.     if (checkEmpty(list)) {
  103.         list.head = newElement;
  104.         list.tail = newElement;
  105.        
  106.     }
  107.     list.tail->next = newElement;
  108.     newElement->prev = list.tail;
  109.     list.tail = newElement;
  110.     list.tail->next = NULL;
  111.    
  112. }
  113.  
  114. void deleteElement(dynamic_list& list, int number, short mode)
  115. {
  116.     switch (mode) {
  117.         case 1: //Óäàëåíèå ýëåìåíòà ñ ãîëîâû
  118.             if (list.tail == list.head) {
  119.                 list.head = NULL;
  120.                 list.tail = NULL;
  121.                 cout << "Óäàëåíèå ýëåìåíòà ïðîøëî óñïåøíî.\n";
  122.                 break;
  123.             }
  124.             list.head = list.head->next;
  125.                 list.head->prev = NULL;
  126.             cout << "Óäàëåíèå ýëåìåíòà ïðîøëî óñïåøíî.\n";
  127.             break;
  128.         case 2: //Óäàëåíèå ýëåìåíòà ñ õâîñòà
  129.             if (list.tail == list.head) {
  130.                 list.head = NULL;
  131.                 list.tail = NULL;
  132.                 cout << "Óäàëåíèå ýëåìåíòà ïðîøëî óñïåøíî.\n";
  133.                 break;
  134.             }
  135.             list.tail = list.tail->prev;
  136.             list.tail->next = NULL;
  137.             cout << "Óäàëåíèå ýëåìåíòà ïðîøëî óñïåøíî.\n";
  138.             break;
  139.         case 3: //Óäàëåíèå óêàçàííîãî ýëåìåíòà
  140.             element* current;
  141.             current = list.head;
  142.             if (number == 1) {
  143.                 deleteElement(list, 1, 1);
  144.                 break;
  145.             }
  146.             int i = 1;
  147.             for (; i < number && current != NULL; i++)
  148.                 current = current->next;
  149.             if (current == list.tail) {
  150.                 deleteElement(list, i, 2);
  151.                 break;
  152.             }
  153.             if (current != NULL) {
  154.                 current->prev->next = current->next;
  155.                 current->next->prev = current->prev;
  156.                 delete current;
  157.                 cout << "\nÓäàëåíèå ýëåìåíòà ïðîøëî óñïåøíî.\n";
  158.                 break;
  159.             }
  160.             else {
  161.                 cout << "\nÝëåìåíò ñ òàêèì íîìåðîì íå ñóùåñòâóåò.\n";
  162.                 return;
  163.             }
  164.     }
  165. }
  166.  
  167. bool checkEmpty(dynamic_list list)
  168. {
  169.     return (list.head == NULL || list.tail == NULL) ? true : false;
  170. }
  171.  
  172. void showList(dynamic_list list)
  173. {
  174.     cout << "Òåêóùèé ñïèñîê:\n";
  175.     while (list.head != NULL) {
  176.         cout << list.head->info << ' ';
  177.         list.head = list.head->next;
  178.     }
  179.     cout << '\n';
  180. }
  181.  
  182. void findElement(dynamic_list& list, int elem)
  183. {  
  184.     element * k = new element;
  185.     while (list.head != NULL) {
  186.         k->info = list.head->info;
  187.         if (k->info == elem){
  188.             cout << elem;
  189.             break;
  190.         }
  191.         else
  192.             list.head = list.head->next;
  193.     }
  194. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement