Advertisement
hinagawa

Списки 1

May 13th, 2019
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.27 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 create(node*&top, int n)
  11. {
  12.     node*p = new node;
  13.     int i;
  14.     top = NULL;
  15.     for (i = 0; i < n; i++)
  16.     {
  17.         cout << "Enter p->data";
  18.         cin >> p->data;
  19.         p->next = top;
  20.         top = p;
  21.     }
  22. }
  23. int lenght_of_list(node*top)
  24. {
  25.     int l = 0;
  26.     node*p = new node;
  27.     p = top;
  28.     while (p)
  29.     {
  30.         l++;
  31.         p = p->next;
  32.     }
  33.     return l;
  34. }
  35. void count_info(node*&top, int x)
  36. {
  37.     int s = 0;
  38.     node*p = new node;
  39.     p = top;
  40.     while (p && (p->data != x))
  41.         p = p->next;
  42.     s++;
  43.  
  44. }
  45.  
  46. int different_info(node*&top)
  47. {
  48.     int i;
  49.     int k = 0;
  50.     bool f;
  51.     int n = sizeof(top);
  52.     int *a = new int[n];
  53.     node*p = new node;
  54.     p = top;
  55.     for (i = 0; i < n; i++)
  56.     {
  57.         a[i] = p->data;
  58.         p = p->next;
  59.     }
  60.     int j;
  61.     for (i = 0; i < n; i++)
  62.     {
  63.         f = true;
  64.         for (j = 0; j < n; j++)
  65.             if (a[i] == a[j] && i != j)
  66.                 f = false;
  67.     }
  68.     if (f)
  69.         k++;
  70.     return k;
  71.  
  72.  
  73.  
  74. }
  75. node* find_address(node*top, int k)
  76. {
  77.     node*p;
  78.     p = top;
  79.     while (p && k > 0)
  80.     {
  81.         p = p->next;
  82.         k--;
  83.     }
  84.     return p;
  85. }
  86. node* find_data(node*top, int info)// zadanye 2
  87. {
  88.     node*p = top;
  89.     while (p && (p->data != info))
  90.         p = p->next;
  91.     return p;
  92. }
  93. void create_list(node* &top, ifstream&f)//exercise 3
  94. {
  95.     int i;
  96.     node* p;
  97.     top = new node;
  98.     top = NULL;
  99.     while (f)
  100.     {
  101.         p = new node;
  102.         f >> p->data;
  103.         p->next = top;
  104.         top = p;
  105.     }
  106.  
  107. }
  108. bool prime(int x)
  109. {
  110.     bool p = true;
  111.     if (x <= 1)
  112.         return  false;
  113.     if (x == 2)
  114.         return true;
  115.     for (int i = 2; i*i <= x && p; i++)
  116.     {
  117.         if (x%i == 0)
  118.             p = false;
  119.  
  120.     }
  121.     return p;
  122. }
  123. void create_prime(node*top, int n)
  124. {
  125.     node*p;
  126.     top = new node;
  127.     top = NULL;
  128.     for (int i = 0; n <= 0; i++)
  129.     {
  130.         if (prime(i))
  131.         {
  132.             p = new node;
  133.             p->data = i;
  134.             p->next = top;
  135.             top = p;
  136.             n--;
  137.         }
  138.     }
  139. }
  140. node* find_address_last_member(node*top)//нахождение адреса последнего элемента
  141. {
  142.     node*p = top;
  143.     while (p->next)
  144.         p = p->next;
  145.     return p;
  146. }
  147. void add(node*top1, node*top2)//соединение 2 списков
  148. {
  149.     node*p = find_address_last_member(top1);
  150.     p->next = top2;
  151. }
  152. int min(node*top)
  153. {
  154.     int m = top->data;
  155.     while (top)
  156.     {
  157.         if (top->data < m)
  158.             m = top->data;
  159.         top = top->next;
  160.     }
  161.     return m;
  162. }
  163. int sum(node*top)
  164. {
  165.     int s = 0;
  166.     node*p = top;
  167.     while (p)
  168.     {
  169.         s += p->data;
  170.         p = p->next;
  171.  
  172.     }
  173.     return s;
  174. }
  175. void delete_top(node*&top)
  176. {
  177.     node*p;
  178.     if (top != NULL)
  179.     {
  180.         p = top->next;
  181.         delete top;
  182.         top = p;
  183.     }
  184.  
  185. }
  186. void delete_k(node*&top, int k)
  187. {
  188.     node*p = top;
  189.     int s = 0;
  190.     for (s = 0; s < k; s++)
  191.         p = p->next;
  192.     delete_top(p);
  193. }
  194. void delete_info(node*&top, int x)
  195. {
  196.     node*p = top;
  197.     while (p->data != x)
  198.         p = p->next;
  199.     delete_top(p);
  200. }
  201. void delete_p(node*&top, node*&p)
  202. {
  203.     while (top->next != p->next)
  204.         top = top->next;
  205.     delete_top(top);
  206.  
  207. }
  208. void add_first(node*&top, int data)
  209. {
  210.     node*p;
  211.     p->data = data;
  212.     p->next = top;
  213.     top = p;
  214. }
  215. void add_last(node*&top, int data)
  216. {
  217.     node*l;
  218.     node*q;
  219.     l = find_address_last_member(top);
  220.     q->data = data;
  221.     q->next = NULL;
  222.     l->next = q;
  223.  
  224.  
  225.  
  226. }
  227. void two_lists(node*top, int k)
  228. {
  229.     node*p1;
  230.     node*p2;
  231.     p1 = NULL;
  232.     p2 = NULL;
  233.     int s = 0;
  234.     for (s = 0; s < k; s++)
  235.         add_first(p1, top->data);
  236.     add_first(p2, top->data);
  237.  
  238.  
  239. }
  240. void two_lists1(node*top)
  241. {
  242.     node*p1;
  243.     node*p2;
  244.     p1 = NULL;
  245.     p2 = NULL;
  246.     for (int i = 1; i <= lenght_of_list(top); i++)
  247.     {
  248.         if (i % 2 == 0)
  249.             add_first(p2, top->data);
  250.         else
  251.             add_first(p1, top->data);
  252.  
  253.     }
  254. }
  255. node* previous(node* top, node* p)
  256.  
  257. {node* pr, *q;
  258.   q = top;
  259.  pr = NULL;
  260. while (q != p && q)
  261. { pr = q;
  262.    q = q->next;
  263. }
  264. if (q == p) return pr;
  265. return NULL;
  266.  
  267. }
  268. void reverse_list(node*&top, int n)
  269. {
  270.     node*q = top;
  271.     node*p;
  272.     node*m = new node;
  273.     p = find_address_last_member(top);
  274.     for (int i = 0; i = n / 2; i++)
  275.     {
  276.         m = top;
  277.         top = p;
  278.         p = m;
  279.         top = top->next;
  280.         p = previous(top, p);
  281.     }
  282.  
  283.  
  284.  
  285. }
  286. bool underlist(node*p, node*q)
  287. {
  288.     bool t = true;
  289.     if (p->data != q->data)
  290.         p = p->next;
  291.     else
  292.     {
  293.         if (p->data = q->data && p && q)
  294.         {
  295.             p = p->next;
  296.             q = q->next;
  297.         }
  298.         else t = false;
  299.     }
  300.     return t;
  301. }
  302. void sort(node*&top)//сортировка списка
  303. {
  304.     for (node*p = top; p->next; p = p->next)
  305.         for (node* q = p->next; q; q = q->next)
  306.         {
  307.             if (p->data < q->data)
  308.             {
  309.                 int r = p->data;
  310.                 p->data = q->data;
  311.                 q->data = r;
  312.             }
  313.         }
  314.  
  315.  
  316. }
  317. node*&mix(node*p, node*q)
  318. {
  319.     node*u;
  320.     u = find_address_last_member(p);
  321.     u->next = q;
  322.  
  323. }
  324. node*&mix_lists(node*&q, node*&p)
  325. {
  326.     sort(q);
  327.     sort(p);
  328.     sort(mix(p, q));
  329.  
  330.  
  331. }
  332. bool is_Member(node* top, int data)
  333.  
  334. {
  335.  
  336.     if (find_address(top, data)) return true; else return false;
  337.  
  338. }
  339. node* set_U(node*s, node*t)
  340. {
  341.     node*U = NULL;
  342.     while (s)
  343.     {
  344.         add_first(U, s->data);
  345.         s = s->next;
  346.  
  347.     }
  348.     while (t)
  349.     {
  350.         if (!is_Member(s, t->data))
  351.         {
  352.             add_first(s, t->data);
  353.             t = t->next;
  354.         }
  355.     }
  356.     return U;
  357. }
  358. node* set_V(node*s, node*t)
  359. {
  360.     node*V = NULL;
  361.     while (t)
  362.     {
  363.         if (is_Member(s, t->data))
  364.             add_first(V, t->data);
  365.         t = t->next;
  366.  
  367.     }
  368.     return V;
  369. }
  370. node* set_W(node*s, node*t)
  371. {
  372.     node*W = NULL;
  373.     while (s)
  374.     {
  375.         add_first(W, s->data);
  376.         s = s->next;
  377.  
  378.     }
  379.     if (is_Member(W, t->data))
  380.     {
  381.         delete_info(W, t->data);
  382.         t = t->next;
  383.  
  384.     }
  385.     return W;
  386. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement