Advertisement
Guest User

Untitled

a guest
Jan 31st, 2015
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.25 KB | None | 0 0
  1. /*1) Stworzyć 100 kulek o wartościach od 100-999, każda kulka ma wartość,
  2.  
  3. wskaźnik na następną, oraz licznik którą jest z kolei
  4. 2) Włożyć kulki na listę jednokierunkową w taki sposób, że nowa kulka jest
  5.  
  6. wstawiana bezpośrednio za roota
  7. 3) Wyświetlić listę, podać wartość ostatniej kulki i podać licznik ostatniej
  8.  
  9. (obie rzeczy na funkcjach w klasie)
  10. 4) Z listy wyjąć wszystkie wartości parzyste i z nich utworzyć drugą listę,
  11.  
  12. która zawsze będzie posortowana rosnąco
  13. 5) Po każdorazowym dodaniu nowej kulki do drugiej listy, wyświetlać drugą
  14.  
  15. listę
  16. 6) Wyświetlić obie gotowe listy, zrobić funkcję liczącą ile jest kulek w
  17.  
  18. każdej liście
  19. 7) Z obu list wyjąć liczby podzielne przez 3 i wstawić je do drzewa
  20. 8) Przygotować funkcje do drzewa, która będzie zwracała ile jest poziomów w
  21.  
  22. drzewie, oraz ile jest elementów na drzewie (? od tego momentu już nie
  23.  
  24. pamiętam dokładnie)
  25. 9) Destruktor do usuwania kulek
  26.  
  27. */
  28.  
  29. #include <iostream>
  30. #include <cstdlib>
  31. using namespace std;
  32.  
  33.  
  34. class Kulka{
  35. public:
  36.         int val,nr;
  37.         Kulka *next;
  38.  
  39.         Kulka(int);
  40.         Kulka(int,int);
  41.         void add(Kulka *);
  42.         void display();
  43.         void last();
  44.         void addv2(Kulka *);
  45.         int ile();
  46. };
  47. class Drzewo{
  48. public:
  49.     int val;
  50.     Drzewo *prawy,*lewy;
  51.     Drzewo(int);
  52.     void add(Drzewo *);
  53.     void display();
  54.     int ile();
  55. };
  56.  
  57. Drzewo::Drzewo(int value){
  58.     val=value;
  59.     prawy=NULL;
  60.     lewy=NULL;
  61. }
  62. Kulka::Kulka(int number){
  63.     nr=number;
  64.     val=(rand()%900)+100;
  65.     next=NULL;
  66. }
  67. Kulka::Kulka(int number,int wart){
  68.     nr=number;
  69.     val=wart;
  70.     next=NULL;
  71. }
  72. void Kulka::add(Kulka *wsk){
  73.     if(!next){
  74.         next=wsk;
  75.     }
  76.     else{
  77.         wsk->next=next;
  78.         next=wsk;
  79.     }
  80. }
  81. void Kulka::addv2(Kulka *wsk){
  82.     wsk->next=NULL;
  83.     if(!next){
  84.         next=wsk;
  85.     }
  86.     else if(next->val>wsk->val){
  87.         wsk->next=next;
  88.         next=wsk;
  89.     }
  90.     else{
  91.         next->addv2(wsk);
  92.     }
  93. }
  94. void Kulka::display(){
  95.     cout << val <<" ";
  96.     if(next)next->display();
  97.     else{cout << endl;}
  98. }
  99. void Kulka::last(){
  100.    if(next)next->last();
  101.     else{
  102.         cout << endl << "Ostatnia wartosc: " << val << " Numer: " << nr <<endl;
  103. ;    }
  104. }
  105. int Kulka::ile(){
  106.     if(next)return 1+next->ile();
  107.     return 1;
  108.  
  109. }
  110. void Drzewo::add(Drzewo *wsk){
  111.     if(val>wsk->val){
  112.         if(lewy){
  113.             lewy->add(wsk);
  114.         }
  115.         else{
  116.             lewy=wsk;
  117.         }
  118.     }
  119.     else{
  120.         if(prawy){
  121.             prawy->add(wsk);
  122.         }
  123.         else{
  124.             prawy=wsk;
  125.         }
  126.     }
  127. }
  128. void Drzewo::display(){
  129.     if(lewy){lewy->display();}
  130.     cout << val << "\t";
  131.     if(prawy){prawy->display();}
  132. }
  133. int Drzewo::ile(){
  134.     if(lewy && prawy){return 2+lewy->ile()+prawy->ile();}
  135.     else if(prawy){return 1+prawy->ile();}
  136.     else if(lewy){return 1+lewy->ile();}
  137.     return 0;
  138. }
  139.  
  140.  
  141. int main(){
  142.  
  143.     Kulka *first=new Kulka(0);
  144.  
  145.     for(int i=1;i<20;i++){
  146.         first->add(new Kulka(i));
  147.     }
  148.  
  149.  
  150.     first->display();
  151.     first->last();
  152.  
  153.     Kulka *second=NULL;
  154.  
  155.     Kulka *t=first;
  156.     Kulka *h=NULL;
  157.  
  158.     while(t){
  159.         if(t->val%2==0){
  160.             if(t==first){
  161.                 first=first->next;
  162.                 if(second==NULL){
  163.                     second=t;
  164.                     second->next=NULL;
  165.                     t=t->next;
  166.                     second->display();
  167.                 }
  168.                 else{
  169.                     second->addv2(t);
  170.                     second->display();
  171.                 }
  172.             }
  173.             else{
  174.                 if(second==NULL){
  175.                     second=t;
  176.                     h->next=t->next;
  177.                     second->next=NULL;
  178.                     t=h->next;
  179.                     second->display();
  180.                 }
  181.                 else{
  182.                     h->next=t->next;
  183.                     second->addv2(t);
  184.                     second->display();
  185.                     t=h->next;
  186.                 }
  187.             }
  188.  
  189.         }
  190.         else{
  191.             h=t;
  192.             t=t->next;
  193.         }
  194.     }
  195.  
  196.     cout << endl;
  197.     first->display();
  198.     cout << endl;
  199.     second->display();
  200.     cout << endl << "Liczba elem w pierwszej liscie: " << first->ile() <<endl;
  201.     cout << endl << "Liczba elem w drugiej liscie: " << second->ile() <<endl;
  202.     cout << endl;
  203.     t=first;
  204.     h=NULL;
  205.     Drzewo *root=NULL;
  206.  
  207.     while(t){
  208.         if(t->val%3==0){
  209.             if(t==first){
  210.                 if(root==NULL){
  211.                     first=t->next;
  212.                     root=new Drzewo(t->val);
  213.                     t=t->next;
  214.                 }
  215.                 else{
  216.                     first=t->next;
  217.                     root->add(new Drzewo(t->val));
  218.                     t=t->next;
  219.                 }
  220.             }
  221.             else{
  222.                 if(root==NULL){
  223.                     root=new Drzewo(t->val);
  224.                     h->next=t->next;
  225.                     t=t->next;
  226.                 }
  227.                 else{
  228.                     root->add(new Drzewo(t->val));
  229.                     h->next=t->next;
  230.                     t=t->next;
  231.                 }
  232.  
  233.             }
  234.         }
  235.         else{
  236.             h=t;
  237.             t=t->next;
  238.         }
  239.     }
  240.  
  241.     root->display();
  242.     cout << endl << "Liczba elem w drzewie: " << root->ile()+1 <<endl;
  243.     h=NULL;
  244.     t=second;
  245.     cout <<endl;
  246.  
  247.     while(t){
  248.         if(t->val%3==0){
  249.             if(t==second){
  250.                 if(root==NULL){
  251.                     second=t->next;
  252.                     root=new Drzewo(t->val);
  253.                     t=t->next;
  254.                 }
  255.                 else{
  256.                     second=t->next;
  257.                     root->add(new Drzewo(t->val));
  258.                     t=t->next;
  259.                 }
  260.             }
  261.             else{
  262.                 if(root==NULL){
  263.                     root=new Drzewo(t->val);
  264.                     h->next=t->next;
  265.                     t=t->next;
  266.                 }
  267.                 else{
  268.                     root->add(new Drzewo(t->val));
  269.                     h->next=t->next;
  270.                     t=t->next;
  271.                 }
  272.  
  273.             }
  274.         }
  275.         else{
  276.             h=t;
  277.             t=t->next;
  278.         }
  279.     }
  280.  
  281.     root->display();
  282.     cout << endl << "Liczba elem w drzewie: " << root->ile()+1 <<endl;
  283. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement