Advertisement
Guest User

Untitled

a guest
Feb 20th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.86 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdlib.h>
  3.  
  4. using namespace std;
  5.  
  6. struct Node1 {
  7.     int cislo;
  8.     Node1 *dalsi;
  9.  
  10.     Node1(int i, Node1 * n) {
  11.         cislo = i;
  12.         dalsi = n;
  13.     }
  14. };
  15.  
  16. struct Node2 {
  17.     int cislo;
  18.     Node2 *dalsi;
  19.     Node2 *back;
  20.  
  21.     Node2(int i, Node2 *n, Node2 * b) {
  22.         cislo = i;
  23.         dalsi = n;
  24.         back = b;
  25.     }
  26. };
  27.  
  28.  
  29.  
  30.  
  31.  
  32. Node1* vytvor1(int *pole, int pocet) {  // Jednosmerny spojovy seznam
  33.     Node1* prvni = NULL;
  34.  
  35.     for (int i = pocet - 1; i >= 0; i--){
  36.         prvni = new Node1(pole[i], prvni);
  37.       }
  38.     return prvni;
  39. }
  40.  
  41.  
  42.  
  43. Node1* vytvorc(int *pole, int pocet) {   // Cyklicky spojovy seznam
  44.     Node1* prvni = NULL;
  45.     prvni = new Node1(pole[pocet-1], prvni);
  46.        for (int i = pocet-2; i >= 0; i--){
  47.       prvni = new Node1(pole[i], prvni);
  48.     }
  49.     return prvni;
  50. }
  51.  
  52.  
  53.  
  54. Node2* vytvor2(int *pole, int pocet) {     // Dvojsmerny spojovy seznamu
  55.     Node2* prvni = new Node2(pole[0], NULL, NULL);
  56.     Node2* predchozi = prvni;
  57.     Node2* aktualni;
  58.  
  59.     for (int i = 1; i < pocet; i++) {
  60.         aktualni = new Node2(pole[i], NULL, predchozi);
  61.         predchozi->dalsi = aktualni;
  62.         predchozi = aktualni;
  63.     }
  64.     return prvni;
  65. }
  66.  
  67.  
  68.  
  69. void vypis1(Node1 *zac) {  // Vypis Jednosmerneho spojoveho seznamu
  70.     while(zac){
  71.         cout << zac->cislo << " ";
  72.         zac = zac->dalsi;
  73.     }
  74. }
  75.  
  76.  
  77.  
  78. void vypisc(Node1 *zac) {  // Vypis Cyklickeho spojovy seznam
  79.     Node1 *prvni = zac;
  80.     while (zac){
  81.         cout << zac->cislo << " ";
  82.         zac = zac->dalsi;
  83.     }
  84.     cout << endl;
  85. }
  86.  
  87.  
  88.  
  89. void vypis2(Node2 *zac) {  // Vypis dvojsmerneho spojoveho seznamu
  90.     Node2* prvni = zac;
  91.  
  92.     while (zac) {
  93.         cout << zac->cislo << " ";
  94.         zac = zac->dalsi;
  95.     }
  96.     cout << endl;
  97. }
  98.  
  99.  
  100.  
  101. void vypis2r(Node2 *zac) {  // Vypis dvojsmerneho seznamu od konce
  102.  
  103.     while (zac->dalsi){
  104.         zac = zac->dalsi;
  105.     }
  106.  
  107.     while (zac) {
  108.         cout << zac->cislo << " ";
  109.         zac = zac->back;
  110.     }
  111.     cout << endl;
  112. }
  113.  
  114.  
  115. Node1 *vypustLiche(Node1 *zac) {  //Vypusti vsechna licha cisla ze seznamu
  116.     Node1 *tmp, *aktualni, *predchozi;
  117.  
  118.     predchozi = NULL;
  119.     aktualni = zac;
  120.  
  121.     while (aktualni) {
  122.         if (aktualni->cislo % 2 != 0) {
  123.             tmp = aktualni->dalsi;
  124.  
  125.             if (predchozi != NULL) {
  126.                 predchozi->dalsi = tmp;
  127.             } else {
  128.                 zac = tmp;
  129.                 predchozi = NULL;
  130.             }
  131.  
  132.             delete aktualni;
  133.             aktualni = tmp;
  134.         } else {
  135.             predchozi = aktualni;
  136.             aktualni = aktualni->dalsi;
  137.         }
  138.  
  139.     }
  140.     return zac;
  141. }
  142.  
  143. Node1 *vlozZaSude(Node1 *zac) { //Rozsireny seznam 2x za kazde sude cislo
  144.     Node1 *aktualni = zac;
  145.     Node1 *tmp = NULL;
  146.  
  147.     while (aktualni) {
  148.         if (aktualni->cislo % 2 == 0) {
  149.             tmp = new Node1(((aktualni->cislo)*2), aktualni->dalsi);
  150.             aktualni->dalsi = tmp;
  151.             aktualni = (aktualni->dalsi) ? aktualni->dalsi->dalsi : NULL;
  152.         } else aktualni = aktualni->dalsi;
  153.     }
  154.  
  155.     return zac;
  156. }
  157.  
  158.  
  159. Node1 *presunMax(Node1* zac) {  //Presune nejvetsi cislo na konec seznamu
  160.     Node1* max = zac;
  161.     Node1* aktualni = zac;
  162.     Node1* prvni = zac;
  163.     Node1* predMax = NULL;
  164.     Node1* predchozi = NULL;
  165.  
  166.     while (aktualni) {
  167.         if (aktualni->cislo > max->cislo) {
  168.             max = aktualni;
  169.             predMax = predchozi;
  170.         }
  171.         predchozi = aktualni;
  172.         aktualni = aktualni->dalsi;
  173.     }
  174.  
  175.     if (!predMax) prvni = max->dalsi;
  176.     else predMax->dalsi = max->dalsi;
  177.  
  178.     predchozi->dalsi = max;
  179.     max->dalsi = NULL;
  180.  
  181.     return prvni;
  182.  
  183. }
  184.  
  185. Node1 *presunMin(Node1 *zac) {  //Presune nejmensi cislo na zacatek seznamu
  186.     Node1* min = zac;
  187.     Node1* beforeMin = NULL;
  188.     Node1* predchozi = NULL;
  189.     Node1* aktualni = zac;
  190.     Node1* prvni = zac;
  191.  
  192.     while (aktualni) {
  193.         if (aktualni->cislo < min->cislo) {
  194.             min = aktualni;
  195.             beforeMin = predchozi;
  196.         }
  197.         predchozi = aktualni;
  198.         aktualni = aktualni->dalsi;
  199.     }
  200.     if (beforeMin) {
  201.         beforeMin->dalsi = min->dalsi;
  202.         min->dalsi = zac;
  203.         prvni = min;
  204.     }
  205.  
  206.     return prvni;
  207. }
  208.  
  209.  
  210. Node2 *vypustLiche2(Node2 *zac) {  // Vypusti vsechny licha cisla z obousmerneho seznamu
  211.     Node2* prvni = zac;
  212.     while (zac) {
  213.         if (zac->cislo % 2 > 0) {
  214.             if (zac->back == NULL) {
  215.                 prvni = zac->dalsi;
  216.                 zac->dalsi->back = NULL;
  217.             } else zac->back->dalsi = zac->dalsi;
  218.  
  219.             if (zac->dalsi == NULL) {
  220.                 zac->back->dalsi = NULL;
  221.             } else zac->dalsi->back = zac->back;
  222.             Node2* tmp = zac;
  223.             zac = zac->dalsi;
  224.             delete tmp;
  225.         } else zac = zac->dalsi;
  226.     }
  227.     return prvni;
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement