SHARE
TWEET

Untitled

a guest Jun 18th, 2019 56 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4.  
  5.  
  6. using namespace std;
  7.  
  8. int rozmiar = 0;
  9. int nowy_rozmiar = 0;
  10. int * tablica = NULL;
  11.  
  12. void pamiecdynamiczna()
  13. {
  14.     int * nowa_tablica = (int*)malloc(nowy_rozmiar*sizeof(int));
  15.     if (tablica != NULL)
  16.     {
  17.         for(int i=0; i<rozmiar; i++) nowa_tablica[i] = tablica[i];
  18.     }
  19.     int * temp = tablica;
  20.     tablica = nowa_tablica;
  21.     free(temp);
  22. }
  23.  
  24. void sprawdz_gore(int i)
  25. {
  26.    while (i >= 1 && tablica[i] > tablica[(i-1)/2])
  27.     {
  28.         swap(tablica[i], tablica[(i-1)/2]);
  29.         i=(i-1)/2;
  30.     }
  31. }
  32.  
  33. void dodawanie(int liczba)
  34. {
  35.     int i=rozmiar;
  36.     nowy_rozmiar=rozmiar+1;
  37.     pamiecdynamiczna();
  38.     rozmiar=nowy_rozmiar;
  39.     tablica[i]=liczba;
  40.     sprawdz_gore(i);
  41. }
  42.  
  43. void wypisz (int i)
  44. {
  45.  
  46.         cout << tablica[i] << " ";
  47.         if(2*i+1 < rozmiar) wypisz (2*i+1);
  48.         if (2*i+2 < rozmiar) wypisz (2*i+2);
  49. }
  50.  
  51. void sprawdz_dol()
  52. {
  53.     int i = 0, index = 1;
  54.     while (index < rozmiar)
  55.     {
  56.  
  57.         if(index + 1 < rozmiar && tablica[index + 1] > tablica[index]) index++;
  58.         if(tablica[index] > tablica[i])
  59.         {
  60.             swap(tablica[i],tablica[index]);
  61.             i = index;
  62.             index = 2*index + 1;
  63.         }
  64.         else index = rozmiar;
  65.  
  66.     }
  67. }
  68.  
  69. void usun()
  70. {
  71.     rozmiar--;
  72.     nowy_rozmiar = rozmiar;
  73.     swap(tablica[0],tablica[nowy_rozmiar]);
  74.     pamiecdynamiczna();
  75.     if (rozmiar > 1) sprawdz_dol();
  76.  
  77. }
  78.  
  79. int main()
  80. {
  81.     int licznik=1;
  82.     dodawanie(80);
  83.     dodawanie(48);
  84.     dodawanie(33);
  85.     dodawanie(14);
  86.     dodawanie(7);
  87.     dodawanie(25);
  88.  
  89.     while(licznik!=0)
  90.     {
  91.       int i;
  92.       cin>>i;
  93.       if(i==-1)
  94.       {
  95.           licznik=0;
  96.       }
  97.       else if(i==0)
  98.       {
  99.           cin >> licznik;
  100.           dodawanie(licznik);
  101.       }
  102.       else if(i==1)
  103.       {
  104.           if(rozmiar != 0) usun();
  105.       }
  106.       else if(i==2)
  107.       {
  108.           wypisz(0);
  109.       }
  110.     }
  111.  
  112.     return 0;
  113. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top