Advertisement
Guest User

spisok

a guest
Dec 7th, 2019
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.15 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4.  
  5.  
  6. struct Node
  7. {
  8.     int item;
  9.     Node *next;
  10. };
  11. Node* addHead(Node *head, int Value)
  12. {
  13.     Node *temp = new Node;
  14.  
  15.     temp->next = head;
  16.     temp->item = Value;
  17.  
  18.     head = temp;
  19.     return head;
  20. }
  21.  
  22. Node* removeHead(Node  *head)
  23. {
  24.     if (head == NULL)
  25.         return 0;
  26.  
  27.     Node *p = head;
  28.     head = p->next;
  29.  
  30.     delete p;
  31.     return head;
  32. }
  33.  
  34. Node* findItem(Node *head, int Value)
  35. {
  36.     Node *p = head;
  37.  
  38.     while (p != NULL)
  39.     {
  40.         if (p->item == Value) return p;
  41.         p = p->next;
  42.     }
  43.  
  44.     return NULL;
  45. }
  46. Node* findPos(Node *head, int pos)
  47. {
  48.     Node *p = head;
  49.  
  50.     while ((p != NULL) && (pos > 1))
  51.     {
  52.         p = p->next;
  53.         pos--;
  54.     }
  55.  
  56.     if (p != NULL)
  57.         return p;
  58.     else
  59.         return NULL;
  60. }
  61. void insertAfterItem(Node *p, int Value)
  62. {
  63.     if (p == NULL) return;
  64.  
  65.     Node *temp = new Node;
  66.  
  67.     temp->next = p->next;
  68.     temp->item = Value;
  69.  
  70.     p->next = temp;
  71. }
  72. Node *insert(int number, Node *lst)
  73. {
  74.     Node *temp, *p;
  75.     temp = new Node;
  76.     p = lst->next;
  77.     lst->next = temp;
  78.     temp->item = number;
  79.     temp->next = p;
  80.     return(temp);
  81. }
  82. Node* remove(Node *head, Node *p)
  83. {
  84.     if ((head == NULL) || (p == NULL))  return head;
  85.     if (head == p)
  86.     {
  87.         head = removeHead(head);
  88.         return head;
  89.     }
  90.  
  91.     Node *temp = head;
  92.  
  93.     while ((temp->next != NULL) && (temp->next != p))
  94.         temp = temp->next;
  95.  
  96.     if (temp->next == NULL) return head;
  97.     temp->next = p->next;
  98.     delete p;
  99.     return head;
  100. }
  101.  
  102. void removeAll(Node *Head)
  103. {
  104.     Node *p = Head;
  105.     Node *temp;
  106.     if (p != NULL)
  107.     {
  108.         cout << "Список пустой...\n";
  109.         return;
  110.     }
  111.     while (p != 0)
  112.     {
  113.         temp = p;
  114.         p = p->next;
  115.         delete(temp);
  116.     }
  117. }
  118.  
  119. void outList(Node *head)
  120. {
  121.     Node *p = head;
  122.     while (p != NULL)
  123.     {
  124.         cout << p->item << " ";
  125.         p = p->next;
  126.     }
  127.     cout << endl;
  128. }
  129.  
  130. bool isEmpty(Node *l)
  131. {
  132.     return (l == NULL);
  133. }
  134.  
  135. Node  *sortlists(Node *a, Node *b)
  136. {
  137.     Node *result, *tmp;
  138.     if (a->item <= b->item)
  139.     {
  140.         result = a;
  141.         a = a->next;
  142.     }
  143.     else
  144.     {
  145.         result = b;
  146.         b = b->next;
  147.     }
  148.     tmp = result;
  149.     while (a != NULL && b != NULL)
  150.     {
  151.         if (a->item <= b->item)
  152.         {
  153.             tmp->next = a;
  154.             tmp = a;
  155.             a = a->next;
  156.         }
  157.         else
  158.         {
  159.             tmp->next = b;
  160.             tmp = b;
  161.             b = b->next;
  162.         }
  163.     }
  164.     if (a != NULL)
  165.         tmp->next = a;
  166.     else
  167.         if (b != NULL)
  168.             tmp->next = b;
  169.     return result;
  170. }
  171. int menu()
  172. {
  173.     cout << "\n 1 : Добавить элементы \n";
  174.     cout << " 2 : Вывести список \n";
  175.     cout << " 3 : Вставить элемент после заданного\n";
  176.     cout << " 4 : Вставить элемент в заданную позицию \n";
  177.     cout << " 5 : Удалить заданный элемент \n";
  178.     cout << " 6 : Удалить из головы\n";
  179.     cout << " 7 : Проверка на пустосту\n";
  180.     cout << " 8 : Удалить список\n";
  181.     cout << " 9 : Объединить два упорядоченных списка\n";
  182.     return 0;
  183. }
  184. int main()
  185. {
  186.     setlocale(LC_ALL, "Russian");
  187.     Node *head = NULL;
  188.     Node *p;
  189.     Node *tail = NULL;
  190.     Node *summ = NULL;
  191.     int k;
  192.  
  193.  
  194.  
  195.     int ans;
  196.     int val;
  197.     do
  198.     {
  199.         menu();
  200.         cout << " Выберете действие\n";
  201.  
  202.         cin >> (ans);
  203.         switch (ans)
  204.         {
  205.         case 1: cout << "Введите элементы\nДля завершения введите 0\n";
  206.             cin >> k;
  207.             while (k != 0)
  208.             {
  209.                 head = addHead(head, k);
  210.                 cin >> k;
  211.             }
  212.  
  213.             break;
  214.         case 2:
  215.             outList(head);
  216.             break;
  217.         case 3:
  218.             int val;
  219.             cout << "Введите значение после которого будет добавлен элемент\n";
  220.             cin >> val;
  221.             p = findItem(head, val);
  222.             if (p == NULL)
  223.                 cout << "Элемент '%i' не найден\n" << val;
  224.             else {
  225.                 cout << "Вставить после узла значение = ";
  226.                 cin >> val;
  227.                 insertAfterItem(p, val);
  228.                 outList(head);
  229.             }
  230.             break;
  231.         case 5:
  232.             cout << "Введите значение удаляемого элемента\n";
  233.             cin >> k;
  234.             p = findPos(head, k);
  235.             if (p == NULL)
  236.                 cout << "Элемент не найден\n" << k;
  237.             else
  238.             {
  239.                 cout << "Удаляем элемент \n" << p->item;
  240.                 head = remove(head, p);
  241.  
  242.             }
  243.  
  244.             break;
  245.         case 4:
  246.         {
  247.             int val;
  248.             cout << "Введите значение после которого будет добавлен элемент\n";
  249.             cin >> val;
  250.  
  251.             cout << "Вставить  узел значение которого= ";
  252.             cin >> val;
  253.             insert(val, head);
  254.             outList(head);
  255.         }
  256.         break;
  257.         case 6:
  258.             head = removeHead(head);
  259.             break;
  260.         case 7:
  261.             if (isEmpty(head)) cout << "Список пуст\n";
  262.             break;
  263.         case 8:
  264.             removeAll(head);
  265.             break;
  266.         case 9:
  267.         {
  268.             cout << "Введите элементы первого списка\nДля завершения введите 0\n";
  269.             cin >> k;
  270.             while (k != 0)
  271.             {
  272.                 head = addHead(head, k);
  273.                 cin >> k;
  274.             }
  275.             cout << "Введите элементы второго списка\nДля завершения введите 0\n";
  276.             cin >> k;
  277.             while (k != 0)
  278.             {
  279.                 tail = addHead(tail, k);
  280.                 cin >> k;
  281.             }
  282.             summ = sortlists(head, tail);
  283.             outList(summ);
  284.             break;
  285.         }
  286.         }
  287.     } while (ans != 0);
  288.  
  289.     return 0;
  290.  
  291. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement