Advertisement
Guest User

Untitled

a guest
Oct 21st, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. typedef struct haldacik{
  6. int size;
  7. char name[101];
  8. }HALDA;
  9.  
  10. HALDA halda[100001];
  11. int velkost=1;
  12.  
  13. // vlozi meno a hodnotu do prioritnej fronty
  14. void vloz(char *meno, int hodnota){
  15. int i;
  16. HALDA temp;
  17.  
  18. i = velkost;
  19.  
  20.  
  21. halda[i].size = hodnota;
  22. strcpy(halda[i].name,meno);
  23.  
  24. while (i>1 && halda[i/2].size < hodnota){
  25.  
  26. temp = halda[i];
  27. halda[i] = halda[i/2];
  28. halda[i/2] = temp;
  29. i = i/2;
  30. //}
  31. }
  32. velkost++;
  33. }
  34.  
  35.  
  36. /// vrati meno, ktore bolo doteraz vlozene s najvyssou hodnotou a odstrani ho z prioritnej fronty
  37. char *vyber_najvyssie(){
  38. int i;
  39. char *vypis;
  40. int dst;
  41. int pocetpismen;
  42. pocetpismen = strlen(halda[1].name);
  43. //pocetpismen++;
  44. //printf("%d\n", pocetpismen);
  45. vypis = (char*)malloc(pocetpismen * sizeof(char));
  46.  
  47. strcpy(vypis,halda[1].name);
  48. i = velkost;
  49.  
  50. HALDA temp, temp2;
  51. temp2 = halda[1];
  52. halda[1] = halda[i];
  53. halda[i].size = 0;
  54. velkost--;
  55. i = 1;
  56.  
  57. dst = i;
  58.  
  59. while (1){
  60.  
  61. dst = i;
  62.  
  63. if (i * 2 <= velkost && halda[i*2].size > halda[dst].size){
  64. dst = i * 2;
  65. }
  66.  
  67. if(i * 2 + 1 <= velkost && halda[i*2 + 1].size > halda[dst].size) {
  68. dst = i*2 + 1;
  69. }
  70.  
  71. if (i != dst) {
  72. temp = halda[i];
  73. halda[i] = halda[dst];
  74. halda[dst] = temp;
  75. i = dst;
  76. } else {
  77. break;
  78. }
  79.  
  80. }
  81.  
  82. return vypis;
  83.  
  84.  
  85.  
  86. }
  87.  
  88. int main()
  89. {
  90. // testuje zo vstupu
  91. char buf[100];
  92. int x;
  93.  
  94. while (scanf("%s", buf) > 0)
  95. {
  96. if (!strcmp(buf, "vyber"))
  97. printf("%s\n", vyber_najvyssie());
  98. else
  99. {
  100. scanf("%s %d", buf, &x);
  101. vloz(buf, x);
  102. }
  103. }
  104. return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement