Facebook
From Dubicka, 5 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 284
  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4. struct lista
  5. {
  6.     int liczba;
  7.     struct lista *nast;
  8. };
  9. struct lista* wstaw_na_koniec(struct lista *p, int l)
  10. {
  11.     struct lista *element = new struct lista;
  12.     element->liczba = l;
  13.     element->nast = NULL;
  14.     if (p==NULL) return element;
  15.     struct lista *tmp = p;
  16.     while(tmp->nast!=NULL) tmp = tmp->nast;
  17.     tmp->nast = element;
  18.     return p;
  19. };
  20. struct lista* wstaw_na_poczatek(struct lista *p, int l)
  21. {
  22.     struct lista *element = new struct lista;
  23.     element->liczba = l;
  24.     element->nast = p;
  25.     return element;
  26. }
  27.  
  28. struct lista* wstaw(struct lista *p, int l)
  29. {
  30.     struct lista *element = new struct lista;
  31.     element->liczba = l;
  32.     element->nast = NULL;
  33.  
  34.     if(p==NULL) return element;
  35.  
  36.     if(element->liczba < p->liczba)
  37.     {
  38.         element->nast = p;
  39.         return element;
  40.     }
  41.     struct lista *tmp = p;
  42.     while(tmp->nast && (tmp->nast)->liczba<element->liczba)
  43.         tmp = tmp->nast;
  44.     element->nast = tmp->nast;
  45.     tmp->nast = element;
  46.     return p;
  47. }
  48.  
  49. void wypisz(struct lista *p)
  50. {
  51.     struct lista *tmp = p;
  52.     while(tmp!=NULL)
  53.     {
  54.         cout<<tmp->liczba<<" ";
  55.         tmp = tmp->nast;
  56.     }
  57. }
  58.  
  59. struct lista* usun(struct lista *p, int x)
  60. {
  61.     if (!p) return p;
  62.     struct lista *tmp, *el;
  63.     if (p->liczba == x)
  64.     {
  65.         tmp = p->nast;
  66.         delete p;
  67.         p = tmp;
  68.     }
  69.  
  70.     tmp = p;
  71.     while(tmp->nast && (tmp->nast)->liczba!=x)
  72.         tmp = tmp->nast;
  73.     if(tmp->nast)
  74.     {
  75.         el = tmp->nast;
  76.         tmp->nast = (tmp->nast)->nast;
  77.         delete el;
  78.     }
  79.     return p;
  80. }
  81.  
  82. struct lista* usun_wszystkie(struct lista *p, int x)
  83. {
  84.     if (!p) return p;
  85.     struct lista *tmp, *el;
  86.     while (p && p->liczba == x)
  87.     {
  88.         tmp = p->nast;
  89.         delete p;
  90.         p = tmp;
  91.     }
  92.  
  93.     struct lista *tmp2 = p;
  94.     tmp = p;
  95.     while(tmp->nast)
  96.     {
  97.         while(tmp->nast && (tmp->nast)->liczba!=x)
  98.             tmp = tmp->nast;
  99.         if(tmp->nast)
  100.         {
  101.             el = tmp->nast;
  102.             tmp->nast = (tmp->nast)->nast;
  103.             delete el;
  104.         }
  105.     }
  106.     return p;
  107. }
  108.  
  109. float srednia(struct lista *p)
  110. {
  111.     struct lista *tmp = p;
  112.     float s = 0;
  113.     int n = 0;
  114.     if (!tmp) return 0;
  115.     while(tmp)
  116.     {
  117.         s += tmp->liczba;
  118.         n++;
  119.         tmp = tmp->nast;
  120.     }
  121.     s /= n;
  122.     return s;
  123. }
  124. bool srednia2(struct lista *p, float *s)
  125. {
  126.     struct lista *tmp = p;
  127.     *s = 0;
  128.     int n = 0;
  129.     if (!tmp) return false;
  130.     while(tmp!=NULL)
  131.     {
  132.         (*s) += tmp->liczba;
  133.         n++;
  134.         tmp = tmp->nast;
  135.     }
  136.     (*s) /= n;
  137.     return true;
  138. }
  139. int main()
  140. {
  141.     struct lista *pierwszy=NULL;
  142.     int x;
  143.  
  144.     for(int i=0; i<20; i++)
  145.         pierwszy = wstaw_na_koniec(pierwszy, rand()%10);
  146.     wypisz(pierwszy);
  147.     cout<<endl;
  148.     float sr = 0;
  149.     if(srednia2(pierwszy, &sr)) cout<<"srednia = "<<sr<<endl;
  150.  
  151.     //usuwanie pojedynczego elementu
  152.     cin>>x;
  153.     pierwszy = usun(pierwszy, x);
  154.     wypisz(pierwszy);
  155.  
  156.     //usuwanie wszytskich wyst�pie�
  157.     cin>>x;
  158.     pierwszy = usun_wszystkie(pierwszy, x);
  159.     wypisz(pierwszy);
  160.  
  161. }