Advertisement
Cyzol

Algorytmy2_2 nie dokonczone

Oct 16th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.11 KB | None | 0 0
  1. // ConsoleApplication3.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
  2. //
  3.  
  4. #include <iostream>
  5. #include <string>
  6. #include <time.h>
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9.  
  10. using namespace std;
  11.  
  12. struct Element
  13. {
  14.     long int i;
  15.     double d;
  16.     char c;
  17.    
  18.     Element* nastepny;
  19.     /*
  20.     Element() // konstruktor do wczytywania danych
  21.     {
  22.          
  23.  
  24.          i = (rand() % 99900) + (99);
  25.          d = (rand() % 10000) + (0);
  26.          c = 'T';
  27.  
  28.         // wskazniki ustawiamy na NULL
  29.         nastepny = NULL;
  30.     }
  31.     */
  32.  
  33.    
  34.     void wypisz()
  35.     {
  36.         cout << endl << "int: " << i << " double: " << d << " char: " << c << endl;
  37.     }
  38.  
  39. };
  40.  
  41.  
  42. void dodajElementy(Element** korzen, int x)
  43. {
  44.     srand(time(NULL));
  45.     for (int i = 0; i < x; i++)
  46.     {
  47.        
  48.         Element* nowa = new Element; // tworzenie noweego elementu
  49.  
  50.         Element* pom = (*korzen), *pom1 = NULL;
  51.  
  52.         while (pom != NULL && (pom->i) != (nowa->i))
  53.         {
  54.             pom1 = pom; // pom1 wskazuje poprzednika pom
  55.             pom = pom->nastepny;
  56.         }
  57.        
  58.         if (pom != NULL && (pom->i) == (nowa->i)) // element z takim intem juz istnieje
  59.         {
  60.             //cout << "Element o takim kluczu juz istnieje";
  61.             //delete nowa;
  62.         }
  63.        
  64.        
  65.         else if ((*korzen) == NULL || (pom == (*korzen) && (pom->i) != (nowa->i)))
  66.         {
  67.             nowa->nastepny = (*korzen);
  68.             (*korzen) = nowa;
  69.         }
  70.         else
  71.         {
  72.             pom1->nastepny = nowa;
  73.             nowa->nastepny = pom;
  74.  
  75.         }
  76.         nowa->i = (rand() % 99900) + (99);
  77.         nowa->d = (rand() % 10000) + (0);
  78.         nowa->c = 'T';
  79.     }
  80. }
  81.  
  82.  
  83.  
  84.  
  85. bool usunElement(Element** korzen, int a)
  86. {
  87.     if ((*korzen) == NULL) // lista jest pusta
  88.         return false;
  89.     Element* pomoc = (*korzen), * pomoc1 = NULL; // wskazniki pomocnicze posluza do poruszania sie po liscie
  90.  
  91.     while (pomoc != NULL && (pomoc->i)!=(a)) // dopoki nie znajdziemy wizytowki z podanym nazwiskiem lub nie przeszukamy calego wizytownika
  92.     {
  93.         pomoc1 = pomoc;
  94.         pomoc = pomoc->nastepny;
  95.     }
  96.  
  97.     if (pomoc == NULL) // wyszlismy za liste - nie ma takiego nazwiska na liscie
  98.         return false;
  99.     else if (pomoc == (*korzen)) // usuwamy koniec
  100.     {
  101.         (*korzen) = (*korzen)->nastepny;
  102.         delete pomoc;
  103.     }
  104.     else // usuwamy z srodka lub konca listy
  105.     {
  106.         pomoc1->nastepny = pomoc->nastepny;
  107.         delete pomoc;
  108.     }
  109.     return true;
  110. }
  111.  
  112.  
  113. void wyszukajElement(Element* korzen, int a)
  114. {
  115.     while (korzen != NULL && (korzen->i)!=(a)) // dopoki nie znajdziemy wizytowki z podanym nazwiskiem lub nie przeszukamy calego wizytownika
  116.         korzen = korzen->nastepny;
  117.  
  118.     if (korzen == NULL)
  119.         cout << "Nie ma takiego elementu " << a << endl;
  120.     else
  121.         korzen->wypisz();
  122. }
  123.  
  124.  
  125.  
  126. void wypiszWszystkieElementy(Element* korzen) // wypisywanie calej listy
  127. {
  128.     cout << "Zawartosc listy:\n";
  129.  
  130.     if (korzen == NULL)
  131.         cout << "Lista jest pusta ";
  132.     else
  133.         while (korzen != NULL)
  134.         {
  135.             korzen->wypisz();
  136.             korzen = korzen->nastepny; // przejscie na kolejny element
  137.         }
  138. }
  139.  
  140.  
  141. void wypisz20Elementow(Element* korzen)
  142. {
  143.     cout << "Zawartosc listy:\n";
  144.    
  145.     for (int i = 0; i < 10; i++)
  146.     {
  147.         korzen->wypisz();
  148.         korzen = korzen->nastepny; // przejscie na kolejny element
  149.     }
  150. }
  151.  
  152.  
  153.  
  154.  
  155.  
  156. void sortowanie(Element* korzen)
  157. {
  158.     Element* temp = NULL;
  159.     Element* pomocna = NULL;
  160.  
  161.     for (temp = korzen; temp != NULL; temp = temp->nastepny)
  162.         for (pomocna = temp; pomocna != NULL; pomocna = pomocna->nastepny)
  163.             if (pomocna->i < temp->i)
  164.             {
  165.                 int key = pomocna->i;
  166.                 pomocna->i = temp->i;
  167.                 temp->i = key;
  168.             }
  169. }
  170.  
  171.  
  172.  
  173. void usunListe(Element* korzen)
  174. {
  175.     if (korzen == NULL)
  176.         return;
  177.  
  178.  
  179.     while (korzen != NULL)
  180.     {
  181.         Element* tmp = korzen->nastepny;
  182.         delete korzen;
  183.         korzen = tmp;
  184.     }
  185.     delete korzen;
  186. }
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214. void dodajJedenElement(Element **korzen, int i)
  215. {
  216.     Element* nowa = new Element;    // tworzy nowy element listy
  217.    
  218.     // wypełniamy naszymi danymi
  219.     nowa->i = i;
  220.     nowa->d = (rand() % 10000) + (0);
  221.     nowa->c = 'X';
  222.  
  223.    
  224.     if (korzen == 0) // sprawdzamy czy to pierwszy element listy
  225.     {
  226.         // jeżeli tak to nowy element jest teraz początkiem listy
  227.         *korzen = nowa;
  228.     }
  229.  
  230.     else
  231.     {
  232.         // w przeciwnym wypadku wędrujemy na koniec listy
  233.         Element* temp = *korzen;
  234.  
  235.         while (temp->nastepny)
  236.         {
  237.             // znajdujemy wskaźnik na ostatni element
  238.             temp = temp->nastepny;
  239.         }
  240.  
  241.         temp->nastepny = nowa;  // ostatni element wskazuje na nasz nowy
  242.         nowa->nastepny = 0;     // ostatni nie wskazuje na nic
  243.     }
  244. }
  245.  
  246.  
  247.  
  248. void licznik(Element *korzen)
  249. {
  250.     Element* pomoc = korzen;
  251.     int licznik;
  252.     licznik = 0;
  253.     while (pomoc)
  254.     {
  255.         pomoc = pomoc->nastepny;    
  256.         licznik++;
  257.     }
  258.  
  259.     cout << licznik;
  260. }
  261.  
  262.  
  263. int main()
  264. {
  265.   int X,k1,k2,k3,k4,k5;
  266.   FILE* fp = fopen("inlab02.txt", "r");
  267.   if (fp == NULL)
  268.       return -1;
  269.   fscanf(fp, "%d %d %d %d d% d%", &X, &k1, &k2, &k3, &k4, &k5);
  270.                             //   2001 13666  4    7    -1   100001
  271.   fclose(fp);
  272.  
  273.  
  274.  
  275.     Element* korzen = NULL;
  276.  
  277.  
  278.    
  279.     //wyszukajElement(korzen, k1);
  280.     dodajElementy(&korzen, X);
  281.  
  282.     sortowanie(korzen);
  283.     //wypiszWszystkieElementy(korzen);
  284.  
  285.     licznik(korzen);
  286.    
  287.     sortowanie(korzen);
  288.     wypisz20Elementow(korzen);
  289. }
  290.  
  291.  
  292.     /*
  293.     int wybor;
  294.     cout << "MENU\n"
  295.         << "1.Dodanie elementów\n"
  296.         << "2.Wyswietl zawartosc listy\n"
  297.         << "3.Usun element z listy\n"
  298.         << "4.Wyszukaj element\n"
  299.         << "5.Wyswietl pierwsze 20 wezlow\n"
  300.         << "6.Usun cala liste\n"
  301.         << "7.Dodaj jeden element do listy\n";
  302.     while (cin >> wybor)
  303.     {
  304.         switch (wybor)
  305.         {
  306.         case 1:
  307.  
  308.             dodajElementy(&korzen,X);
  309.             sortowanie(korzen);
  310.             break;
  311.         case 2:
  312.             sortowanie(korzen);
  313.             wypiszWszystkieElementy(korzen);
  314.             break;
  315.         case 3:
  316.             int a;
  317.             cout << "Podaj int ktory chcesz usunac\n";
  318.             cin >> a;
  319.             if (!usunElement(&korzen, a))
  320.                 cout << "Nie ma takiego elementu na liscie" << endl;
  321.             else
  322.                 cout << "Podany element zostal usuniety poprawnie" << endl;
  323.             break;
  324.         case 4:
  325.             int y;
  326.             cout << "Podaj int ktory chcesz znalezc\n";
  327.             cin >> y;
  328.             wyszukajElement(korzen, y);
  329.             break;
  330.         case 5:
  331.             sortowanie(korzen);
  332.             wypisz20Elementow(korzen);
  333.             break;
  334.         case 6:
  335.             usunListe(korzen);
  336.             break;
  337.         case 7:
  338.             dodajJedenElement(&korzen,k2);
  339.             //sortowanie(korzen);
  340.             break;
  341.         default:
  342.             cout << "Wybierz jedna z opcji z menu";
  343.             break;
  344.         }
  345.     }
  346.    
  347.     */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement