Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement