Pagini recente » Cod sursa (job #1199152) | Cod sursa (job #1594138) | Cod sursa (job #2163979) | Cod sursa (job #1370924) | Cod sursa (job #2752998)
#include<iostream>
#include<vector>
using namespace std;
class Heap {
private:
vector<int> A;
int PARENT(int i) {
return (i - 1) / 2;
}
int LEFT(int i) {
return (2*i + 1);
}
int RIGHT(int i) {
return (2*i + 2);
}
void heapify_down(int i) {
int left = LEFT(i);
int right = RIGHT(i);
int largest = i;
if (left < A.size() && A[left] < A[i]) {
largest = left;
}
if (right < A.size() && A[right] < A[largest]) {
largest = right;
}
if (largest != i) {
swap(A[i], A[largest]);
heapify_down(largest);
}
}
void heapify_up(int i)
{
if (i && A[PARENT(i)] > A[i])
{
swap(A[i], A[PARENT(i)]);
heapify_up(PARENT(i));
}
}
public:
void push(int value) {
A.push_back(value);
int index = A.size() - 1;
heapify_up(index);
}
int min() {
if (A.size() == 0) {
return -1;
} else {
return A[0];
}
}
void write() {
cout << "Current list : \n";
for (int i = 0; i < A.size(); i++) {
cout << A[i] << "\n";
}
cout << "----------";
}
void pop() {
A[0] = A.back();
A.pop_back();
heapify_down(0);
}
};
int main() {
Heap valami;
valami.push(4);
valami.push(7);
valami.push(9);
cout << "Current Min : " << valami.min() << "\n";
valami.pop();
valami.push(2);
cout << "Current Min : " << valami.min() << "\n";
valami.pop();
cout << "Current Min : " << valami.min() << "\n";
valami.write();
}