fork download
  1. #include <iostream>
  2.  
  3. class Item{
  4. private:
  5. int key;
  6. int data;
  7. public:
  8. Item(): data(0), key(0){}
  9. Item(int data, int key): data(data), key(key){}
  10. void print(){
  11. std::cout << "data: " << data << ", key " << key << std::endl;
  12. }
  13. bool operator <(const Item &item){ return key < item.key; }
  14. bool operator >(const Item &item){ return key > item.key; }
  15. };
  16.  
  17. template<class Item>
  18. class PQ{
  19. private:
  20. Item *pq; /*Массив элементов*/
  21. int n; /*Текущее оличество элементов в очереди*/
  22. public:
  23. PQ(int max){
  24. pq = new Item[max];
  25. n = 0;
  26. }
  27.  
  28. int empty() const{ return n == 0; }
  29.  
  30. void insert(Item item){
  31. int pos = 0; /*Позиция для вставки*/
  32. int max = 0; /*Максимальный элемент в очереди*/
  33.  
  34. if(n == 0) /*Если в очереди еще нет элементов*/
  35. pos = 0;
  36. else if(n == 1)
  37. pos = 1;
  38. else
  39. for(int i = 1; i < n; i++)
  40. if(pq[i] > pq[max])
  41. max = i;
  42.  
  43. if(max != 0) pos = max + 1;
  44. pq[pos] = item;
  45. n++;
  46. //pq[n++] = item;
  47. }
  48.  
  49. Item getmax(){
  50. int max = 0;
  51.  
  52. for(int i = 1; i < n; i++)
  53. if(pq[max] < pq[i])
  54. max = i;
  55. std::swap(pq[max], pq[n-1]);
  56. return pq[--n];
  57. }
  58.  
  59. Item getmin(){
  60. int min = 0;
  61.  
  62. for(int i = 1; i < n; i++)
  63. if(pq[min] > pq[i])
  64. min = i;
  65. std::swap(pq[min], pq[n-1]);
  66. return pq[--n];
  67. }
  68.  
  69. void show(){
  70. for(int i = 0; i < n; i++)
  71. pq[i].print();
  72. }
  73. };
  74.  
  75. int main(){
  76. int p;;
  77. PQ<Item> pq(50);
  78.  
  79. for(int i = 0; i < 10; i++)
  80. pq.insert(Item(7, i));
  81.  
  82. pq.show();
  83.  
  84. std::cout << "max: ";
  85. pq.getmax().print();
  86. std::cout << "max: ";
  87. pq.getmax().print();
  88. std::cout << "min: ";
  89. pq.getmin().print();
  90. std::cout << "min: ";
  91. pq.getmin().print();
  92.  
  93. std::cin >> p;
  94. return 0;
  95. }
Success #stdin #stdout 0s 3464KB
stdin
Standard input is empty
stdout
data: 7, key 0
data: 7, key 1
data: 7, key 2
data: 7, key 3
data: 7, key 4
data: 7, key 5
data: 7, key 6
data: 7, key 7
data: 7, key 8
data: 7, key 9
max: data: 7, key 9
max: data: 7, key 8
min: data: 7, key 0
min: data: 7, key 1