Advertisement
Guest User

Untitled

a guest
Apr 18th, 2019
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.73 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <fstream>
  4. using namespace std;
  5. struct node
  6. {
  7.     int data;
  8.     node *next;
  9. };
  10. void show(node *top)
  11. {
  12.     node *p = top;
  13.     while (p)
  14.     {
  15.         cout << p->data << endl;
  16.         p = p->next;
  17.     }
  18. }
  19. int kol_yzl(node *top)//кол-во элементов в списке
  20. {
  21.     node *p;
  22.     p = top;
  23.     int k = 0;
  24.     while (p)
  25.     {
  26.         k++;
  27.         p = p->next;
  28.     }
  29.     return k;
  30. }
  31. int kol_zad_znach(node *top, int data)//кол-во элементов с определённым значением
  32. {
  33.     node *p;
  34.     p = top;
  35.     int k = 0;
  36.     while (p)
  37.     {
  38.         if (data == p->data)
  39.             k++;
  40.         p = p->next;
  41.     }
  42.     return k;
  43. }
  44. bool search_el(node *top, int x, node *p)//определяет, встречался ли элемент ранее
  45. {
  46.     node *q;
  47.     q = top;
  48.     while (q && q != p)
  49.     {
  50.         if (q->data == x)
  51.             return true;
  52.         q = q->next;
  53.     }
  54.     return false;
  55. }
  56. int kol_razn(node *top)//кол-во разных элементов
  57. {
  58.     int k = 0;
  59.     node *p;
  60.     p = top;
  61.     while (p)
  62.     {
  63.         if (!search_el(top, p->data, p))
  64.             k++;
  65.         p = p->next;
  66.     }
  67.     return k;
  68. }
  69. node* dostyp_k(node *top, int n)//доступ к катому элементу
  70. {
  71.     node *p;
  72.     p = top;
  73.     for (int k = 1; k != n; k++)
  74.         p = p->next;
  75.     return p;
  76. }
  77. node* dostyp_dat(node *top, int data)//доступ к элементу с датой определённый
  78. {
  79.     node *p;
  80.     p = top;
  81.     while (p && (p->data) != data)
  82.         p = p->next;
  83.     return p;
  84. }
  85. void push(node*&top, int data)//вставка элементы в начало
  86. {
  87.     node *p = new node;
  88.     p->data = data;
  89.     p->next = top;
  90.     top = p;
  91. }
  92. void create_list(ifstream &f, node*&top)//создание списка
  93. {
  94.     top = NULL;
  95.     int data;
  96.     while (f >> data)
  97.         push(top, data);
  98. }
  99. node* find_address_last_member(node*top)//нахождение адреса последнего элемента
  100. {
  101.     node*p = top;
  102.     while (p->next)
  103.         p = p->next;
  104.     return p;
  105. }
  106. void konkat(node*top1, node*top2)//соединение списков
  107. {
  108.     node*p = find_address_last_member(top1);
  109.     p->next = top2;
  110. }
  111. int min(node *top)//минимальное значение
  112. {
  113.     int min;
  114.     min = top->data;
  115.     node*p = top->next;
  116.     while (p)
  117.     {
  118.         if (p->data < min)
  119.             min = p->data;
  120.         p = p->next;
  121.     }
  122.     return min;
  123. }
  124. int sum(node *top)//сумма всех элементов
  125. {
  126.     int sum = 0;
  127.     node*p = top;
  128.     while (p)
  129.     {
  130.         sum += p->data;
  131.         p = p->next;
  132.     }
  133.     return sum;
  134. }
  135. node* previo_k(node *top, int n)//нахождение адреса элемента перед k
  136. {
  137.     node *pr, *q;
  138.     q = top;
  139.     pr = NULL;
  140.     int k = 1;
  141.     while (q&& k != n)
  142.     {
  143.         pr = q;
  144.         q = q->next;
  145.         k++;
  146.     }
  147.     return pr;
  148. }
  149. bool in_list_dat(node *top, int data)//есть ли в списке элемент с данным значением
  150. {
  151.     while (top)
  152.     {
  153.         if (top->data == data)
  154.             return true;
  155.         top = top->next;
  156.     }
  157.     return false;
  158. }
  159. node* previo_dat(node *top, int data)//нахождение адреса элемента перед элементом с указаннымзначением
  160. {
  161.     node *pr, *q;
  162.     q = top;
  163.     pr = NULL;
  164.     while (q&& q->data!=data)
  165.     {
  166.         pr = q;
  167.         q = q->next;
  168.     }
  169.     return pr;
  170. }
  171. void pop(node *&top)//удаление первого элемента
  172. {
  173.     node *p;
  174.     if (top)
  175.     {
  176.         p = top->next;
  177.         delete top;
  178.         top = p;
  179.     }
  180. }
  181. void del_k(node*&top, int n)//удаление к-того элемента
  182. {
  183.     node *r, *p;
  184.     p = dostyp_k(top, n);
  185.     if (n == 1)
  186.         pop(top);
  187.     else
  188.     {
  189.         r = previo_k(top, n);
  190.         r->next = p->next;
  191.         delete p;
  192.     }
  193. }
  194. void del_data(node*&top, int data)//удаление элемента с определённым значением
  195. {
  196.     node *r, *p;
  197.     p = dostyp_dat(top, data);
  198.     if (data == top->data)
  199.         pop(top);
  200.     else
  201.     {
  202.             r = previo_dat(top, data);
  203.             r->next = p->next;
  204.             delete p;
  205.     }
  206. }
  207. void del_yz(node *top, node *p)//удаление узла
  208. {
  209.     node *q;
  210.     q = p->next;
  211.     if (top == p)
  212.         pop(top);
  213.     else
  214.     {
  215.         p->data = q->data;
  216.         p->next = q->next;
  217.         delete q;
  218.     }
  219. }
  220. void after_pos(node *top, int data)//вставка после последнего
  221. {
  222.     node *p = find_address_last_member(top);
  223.     node *q;
  224.     q = new node;
  225.     q->data = data;
  226.     q->next = NULL;
  227.     p->next = q;
  228. }
  229. void insert(node *p, int data)//вставка в начало
  230. {
  231.     node *q;
  232.     q = new node;
  233.     q->data = data;
  234.     q->next = p->next;
  235.     p->next = q;
  236. }
  237. void seporate_k(node*top, node*&top1, node*&top2, int n)//разбиение на 2 списка(перые к элементов к первому, остальные ко второму)
  238. {
  239.         int k = 1;
  240.         top1 = NULL;
  241.         top2 = NULL;
  242.         node*p = top;
  243.         while (p && k != n)
  244.         {
  245.             push(top1, p->data);
  246.             k++;
  247.             p = p->next;
  248.         }
  249.         while (p)
  250.         {
  251.             push(top2, p->data);
  252.             p = p->next;
  253.         }
  254. }
  255. void seporate(node*top, node*&top1, node*&top2)//разделение на 2 списка(на чётных местах первый, остальные второй)
  256. {
  257.         int k = 1;
  258.         top1 = NULL;
  259.         top2 = NULL;
  260.         node *p = top;
  261.         while (p)
  262.         {
  263.             if (k % 2 == 0)
  264.                 push(top2, p->data);
  265.             else
  266.                 push(top1, p->data);
  267.             k++;
  268.             p = p->next;
  269.         }
  270. }
  271.     node* revers(node* top)//переворот списка
  272.     {
  273.         node* top1 = NULL;
  274.  
  275.         while (top)
  276.         {
  277.             push(top1, top->data);
  278.             top = top->next;
  279.         }
  280.         return top1;
  281.     }
  282. bool list_in(node *top, node*p)//есть ли один список в другом
  283. {
  284.     node *q, *r, *s;
  285.     q = top;
  286.     r = p;
  287.     int k = 1;
  288.     int n = kol_yzl(p);
  289.     while (q)
  290.     {
  291.         if (q->data == r->data)
  292.         {
  293.             if (k == 1)
  294.                 s = q;
  295.             k++;
  296.             if (k == n - 1)
  297.                 return true;
  298.         }
  299.         else
  300.         {
  301.             if (k > 1)
  302.                 q = s;
  303.             k = 1;
  304.             r = p;
  305.         }
  306.         q = q->next;
  307.         r = r->next;
  308.     }
  309.     return false;
  310. }
  311. void sort(node* top)//сорторовка
  312. {
  313.     int data;
  314.     node* p, *q;
  315.     p = top;
  316.     while (p->next)
  317.     {
  318.         q = p->next;
  319.         while (q)
  320.         {
  321.             if (p->data > q->data)
  322.             {
  323.                 data = p->data;
  324.                 p->data = q->data;
  325.                 q->data = data;
  326.  
  327.             }
  328.             q = q->next;
  329.         }
  330.         p = p->next;
  331.     }
  332. }
  333. node* union_list(node*top1, node*top2)//объединение
  334. {
  335.     node *top3 = revers(top1);
  336.     while (top2)
  337.     {
  338.         if (!in_list_dat(top3, top2->data))
  339.             push(top3, top2->data);
  340.         top2 = top2->next;
  341.     }
  342.     return top3;
  343. }
  344. node* insert_list(node*top1, node*top2)//пересечение
  345. {
  346.     node*top3 = NULL;
  347.     while (top2)
  348.     {
  349.         if (in_list_dat(top1, top2->data))
  350.             push(top3, top2->data);
  351.         top2 = top2->next;
  352.     }
  353.     return top3;
  354. }
  355. node* razn(node*top1, node*top2)//разность
  356. {
  357.     node * top3 = NULL;
  358.     while (top1)
  359.     {
  360.         if (!in_list_dat(top2, top1->data))
  361.             push(top3, top1->data);
  362.         top1 = top1->next;
  363.     }
  364.     return top3;
  365. }
  366. int main()
  367. {
  368.     ifstream in("test.txt");
  369.     ifstream in1("test1.txt");
  370.     node *top, *p;
  371.     create_list(in, top);
  372.     create_list(in1, top);
  373.  
  374. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement