Advertisement
Dambosin

11 var

Apr 5th, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.48 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include  <time.h>
  4. struct tochd
  5. {
  6.     int inf;
  7.     tochd *l;
  8.     tochd *r;
  9. };
  10. using namespace std;
  11. void NewOchd(tochd **sl, tochd **sr) {
  12.     *sl = new tochd;
  13.     *sr = new tochd;
  14.     (*sl)->l = NULL;
  15.     (*sl)->r = *sr;
  16.     (*sr)->l = *sl;
  17.     (*sr)->r = NULL;
  18. }
  19.  
  20. void AddOchdR(tochd *sp, int inf) {
  21.     tochd *spt = new tochd;
  22.     spt->inf = inf;
  23.     spt->l = sp;
  24.     spt->r = sp->r;
  25.     sp->r->l = spt;
  26.     sp->r = spt;
  27. }
  28. void AddOchdL(tochd *sp, int inf) {
  29.     tochd *spt = new tochd;
  30.     spt->inf = inf;
  31.     spt->l = sp->l;
  32.     spt->r = sp;
  33.     sp->l->r = spt;
  34.     sp->l = spt;
  35. }
  36. int ReadOchdD(tochd *sp) {
  37.     int inf = sp->inf;
  38.     sp->l->r = sp->r;
  39.     sp->r->l = sp->l;
  40.     delete sp;
  41.     return inf;
  42. }
  43. void DelOchdAll(tochd **sl, tochd **sr)
  44. {
  45.     tochd *spt = (*sl)->r;
  46.     while (spt != *sr)
  47.     {
  48.         cout << ReadOchdD(spt) << " ";
  49.         spt = (*sl)->r;
  50.     }
  51.     cout << endl; *sl = NULL;
  52.     delete *sl; *sr = NULL;
  53.     delete *sr;
  54.     return;
  55. }
  56. void div2Ochd(tochd *sl, tochd *sr, tochd **slL,
  57.     tochd **srL, tochd **slR, tochd **srR) {
  58.     NewOchd(slL, srL);
  59.     NewOchd(slR, srR);
  60.     tochd *spt = sl->r;
  61.     while (spt != sr)
  62.     {
  63.         AddOchdL(*srL, ReadOchdD(spt));
  64.         spt = sl->r;
  65.         if (spt != sr)
  66.         {
  67.             AddOchdL(*srR, ReadOchdD(spt));
  68.             spt = sl->r;
  69.         }
  70.     }
  71. }
  72.  
  73. void slipOchd(tochd **sl, tochd **sr, tochd *slL, tochd *srL, tochd
  74.     *slR, tochd *srR)
  75. {
  76.     NewOchd(sl, sr);
  77.     tochd *sptL = slL->r;
  78.     tochd *sptR = slR->r;
  79.     while ((sptL != srL) && (sptR != srR))
  80.     {
  81.         if (sptL->inf < sptR->inf)
  82.         {
  83.             AddOchdL(*sr, ReadOchdD(sptL));
  84.             sptL = slL->r;
  85.         }
  86.         else
  87.         {
  88.             AddOchdL(*sr, ReadOchdD(sptR));
  89.             sptR = slR->r;
  90.         }
  91.     }
  92.     while (sptL != srL)
  93.     {
  94.         AddOchdL(*sr, ReadOchdD(sptL));
  95.         sptL = slL->r;
  96.     }
  97.     delete slL; delete srL;
  98.     while (sptR != srR)
  99.     {
  100.         AddOchdL(*sr, ReadOchdD(sptR));
  101.         sptR = slR->r;
  102.     }
  103.     delete slR; delete srR;
  104. }
  105.  
  106. void SotrSlipOchd(tochd **sl, tochd **sr) {
  107.     tochd *slL, *srL, *slR, *srR;
  108.     if ((*sl)->r == *sr || (*sl)->r->r == *sr) return;
  109.     div2Ochd(*sl, *sr, &slL, &srL, &slR, &srR);
  110.     SotrSlipOchd(&slL, &srL);
  111.     SotrSlipOchd(&slR, &srR);
  112.     slipOchd(sl, sr, slL, srL, slR, srR);
  113. }
  114.  
  115. int main()
  116. {
  117.     setlocale(LC_ALL, "Russian");
  118.     srand(time(NULL));
  119.     int n;
  120.     cout << "Введите количество элементов ";
  121.     cin >> n;
  122.     tochd *sl, *sr;
  123.     NewOchd(&sl, &sr);
  124.     for (int i = 0; i < n; i++) {
  125.         int temp;
  126.         //temp = rand() % 101 - 50;//эта и следующая строчка рандомное заполнение
  127.         //cout << temp << " ";     
  128.         cin >> temp;// эта если нужно ввести с клавиатуры(а не рандомить) чтобы показать что оно удаляет одинаковые элементы
  129.         AddOchdL(sr, temp);
  130.     }
  131.     cout << endl;
  132.  
  133.     tochd *spt = sl->r;
  134.     int x = 11;//твой вариант
  135.     int pos = 1;//позиция варианта
  136.     while (spt != sr && spt->inf != x) {// ищем твой вариант
  137.         pos++;
  138.         spt = spt->r;
  139.     }
  140.     if (spt != sr) {// если нашли выводим позицию, иначе пишем что его нет
  141.         cout << "Элемент с моим вариантом находится на " << pos << " позиции" << endl;
  142.     }
  143.     else {
  144.         cout << "Нет моего варианта" << endl;
  145.     }
  146.  
  147.  
  148.     SotrSlipOchd(&sl, &sr);//сортировка слиянием
  149.  
  150.     int z = -51;//число которого точно не может быть, но здесь храниться предыдущее удаленное число
  151.     spt = sl->r;
  152.     while (spt != sr) {//проходим по всему списку
  153.         if (spt->inf == z) {// если элемента равен ранее удаленным то удаляем его
  154.             spt = spt->r;// переходим на след элемент, а пред удаляем с помощью функции
  155.             ReadOchdD(spt->l);
  156.         }
  157.         else {// если элемент не равен ранее удаленным
  158.             if (spt->inf == spt->r->inf) {//если этот элемента и след одинаковые то удаляем их, и меняем ранее удаленные
  159.                 spt = spt->r->r;// переходим на след-след элемент, а пред удаляем с помощью функции
  160.                 ReadOchdD(spt->l->l);
  161.                 z = ReadOchdD(spt->l);//а это присвоение ранее удаленных
  162.             }
  163.             else {
  164.                 spt = spt->r;// если этот элемент один то просто идем дальше
  165.             }
  166.         }
  167.     }
  168.     DelOchdAll(&sl, &sr);
  169.     return 0;
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement