MeehoweCK

Untitled

Jun 10th, 2021
879
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.93 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct Osoba
  6. {
  7.     string imie;
  8.     string nazwisko;
  9.     Osoba* nastepna;
  10.     Osoba()
  11.     {
  12.         nastepna = nullptr;
  13.     }
  14. };
  15.  
  16. ostream& operator<<(ostream& os, const Osoba osoba)
  17. {
  18.     os << osoba.imie << ' ' << osoba.nazwisko;
  19.     return os;
  20. }
  21.  
  22. struct Lista
  23. {
  24.     Osoba* pierwsza;
  25.     void dodaj_osobe(string, string);
  26.     Lista()
  27.     {
  28.         pierwsza = nullptr;
  29.     }
  30.     void sortuj_malejaco();
  31.     void usun_osobe(unsigned);
  32. };
  33.  
  34. void Lista::dodaj_osobe(string name, string surname)
  35. {
  36.     Osoba* nowa = new Osoba;
  37.     nowa->imie = name;
  38.     nowa->nazwisko = surname;
  39.     nowa->nastepna = nullptr;
  40.  
  41.     // sprawdzamy czy dana osoba jest pierwszą na liście
  42.     if(pierwsza == nullptr)
  43.     {
  44.         pierwsza = nowa;
  45.     }
  46.     else
  47.     {
  48.         Osoba* temp = pierwsza;
  49.         while(temp->nastepna != nullptr)
  50.             temp = temp->nastepna;
  51.         temp->nastepna = nowa;
  52.     }
  53. }
  54.  
  55. void Lista::usun_osobe(unsigned nr)
  56. {
  57.     if(nr == 0)
  58.     {
  59.         Osoba* temp = pierwsza;
  60.         pierwsza = pierwsza->nastepna;
  61.         delete temp;
  62.         return;
  63.     }
  64.  
  65.     Osoba* temp = pierwsza;
  66.     Osoba* poprzednia;
  67.     while(nr > 0)
  68.     {
  69.         poprzednia = temp;
  70.         temp = temp->nastepna;
  71.         --nr;
  72.     }
  73.     poprzednia->nastepna = temp->nastepna;
  74.     delete temp;
  75. }
  76.  
  77. void Lista::sortuj_malejaco()
  78. {
  79.     Lista* temp;
  80.     temp->pierwsza = nullptr;
  81.     Osoba* najwieksza;
  82.     Osoba* szukana;
  83.     unsigned nr, nr_najw;
  84.  
  85.     while(pierwsza != nullptr)
  86.     {
  87.         nr = 0;
  88.         nr_najw = 0;
  89.         najwieksza = pierwsza;
  90.         szukana = pierwsza;
  91.  
  92.         while(szukana->nastepna != nullptr)
  93.         {
  94.             szukana = szukana->nastepna;
  95.             ++nr;
  96.             if(szukana->nazwisko > najwieksza->nazwisko)
  97.             {
  98.                 nr_najw = nr;
  99.                 najwieksza = szukana;
  100.             }
  101.         }
  102.         temp->dodaj_osobe(najwieksza->imie, najwieksza->nazwisko);
  103.         usun_osobe(nr_najw);
  104.     }
  105.     pierwsza = temp->pierwsza;
  106. }
  107.  
  108. int main()
  109. {
  110.     Lista* lista = new Lista;
  111.  
  112.     lista->dodaj_osobe("Andrzej", "A");
  113.     lista->dodaj_osobe("Beata", "B");
  114.     lista->dodaj_osobe("Cecylia", "C");
  115.     lista->dodaj_osobe("Dominik", "D");
  116.  
  117.     // wyświetlenie listy:
  118.     Osoba* temp = lista->pierwsza;
  119.  
  120.     while(temp != nullptr)
  121.     {
  122.         cout << *temp << endl;
  123.         temp = temp->nastepna;
  124.     }
  125.  
  126.     lista->usun_osobe(2);
  127.     cout << endl;
  128.     lista->sortuj_malejaco();
  129.  
  130.     temp = lista->pierwsza;
  131.  
  132.     while(temp != nullptr)
  133.     {
  134.         cout << *temp << endl;
  135.         temp = temp->nastepna;
  136.     }
  137.  
  138.     cout << endl;
  139.     lista->dodaj_osobe("Zenon", "Z");
  140.     lista->sortuj_malejaco();
  141.     temp = lista->pierwsza;
  142.  
  143.     while(temp != nullptr)
  144.     {
  145.         cout << *temp << endl;
  146.         temp = temp->nastepna;
  147.     }
  148.  
  149.  
  150.     delete lista;
  151.     return 0;
  152. }
Advertisement
Add Comment
Please, Sign In to add comment