Skip to content

Commit 6a14483

Browse files
committed
Add Heap
1 parent f491547 commit 6a14483

File tree

1 file changed

+141
-0
lines changed

1 file changed

+141
-0
lines changed

Heap.cpp

+141
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
class MinHeap {
6+
private:
7+
vector<int> heap;
8+
9+
public:
10+
void heapify(const vector<int> &nums) {
11+
heap.push_back(0);
12+
for (const int &num : nums)
13+
insert(num);
14+
}
15+
16+
MinHeap() { heap.push_back(0); }
17+
MinHeap(const vector<int> &nums) { heapify(nums); }
18+
19+
void insert(int num) {
20+
heap.push_back(num);
21+
int i = heap.size() - 1;
22+
while (i > 1 && heap[i] < heap[i >> 1]) {
23+
swap(heap[i], heap[i >> 1]);
24+
i >>= 1;
25+
}
26+
}
27+
28+
void remove() {
29+
heap[1] = heap[heap.size() - 1];
30+
heap.pop_back();
31+
int i = 1;
32+
while (i < heap.size()) {
33+
int left = i << 1, right = (i << 1) + 1, smallest = i;
34+
if (left < heap.size() && heap[left] < heap[smallest])
35+
smallest = left;
36+
if (right < heap.size() && heap[right] < heap[smallest])
37+
smallest = right;
38+
if (smallest == i)
39+
break;
40+
swap(heap[i], heap[smallest]);
41+
i = smallest;
42+
}
43+
}
44+
45+
int top() { return heap[1]; }
46+
47+
int size() { return heap.size() - 1; }
48+
49+
bool empty() { return heap.size() == 1; }
50+
51+
void replace(int num) {
52+
heap[1] = num;
53+
int i = 1;
54+
while (i < heap.size()) {
55+
int left = i << 1, right = (i << 1) + 1, smallest = i;
56+
if (left < heap.size() && heap[left] < heap[smallest])
57+
smallest = left;
58+
if (right < heap.size() && heap[right] < heap[smallest])
59+
smallest = right;
60+
if (smallest == i)
61+
break;
62+
swap(heap[i], heap[smallest]);
63+
i = smallest;
64+
}
65+
}
66+
};
67+
68+
class MaxHeap {
69+
private:
70+
vector<int> heap;
71+
72+
public:
73+
void heapify(const vector<int> &nums) {
74+
heap.push_back(0);
75+
for (const int &num : nums)
76+
insert(num);
77+
}
78+
79+
MaxHeap() { heap.push_back(0); }
80+
MaxHeap(const vector<int> &nums) { heapify(nums); }
81+
82+
void insert(int num) {
83+
heap.push_back(num);
84+
int i = heap.size() - 1;
85+
while (i > 1 && heap[i] > heap[i >> 1]) {
86+
swap(heap[i], heap[i >> 1]);
87+
i >>= 1;
88+
}
89+
}
90+
91+
void remove() {
92+
heap[1] = heap[heap.size() - 1];
93+
heap.pop_back();
94+
int i = 1;
95+
while (i < heap.size()) {
96+
int left = i << 1, right = (i << 1) + 1, largest = i;
97+
if (left < heap.size() && heap[left] > heap[largest])
98+
largest = left;
99+
if (right < heap.size() && heap[right] > heap[largest])
100+
largest = right;
101+
if (largest == i)
102+
break;
103+
swap(heap[i], heap[largest]);
104+
i = largest;
105+
}
106+
}
107+
108+
int top() { return heap[1]; }
109+
110+
int size() { return heap.size() - 1; }
111+
112+
bool empty() { return heap.size() == 1; }
113+
114+
void replace(int num) {
115+
heap[1] = num;
116+
int i = 1;
117+
while (i < heap.size()) {
118+
int left = i << 1, right = (i << 1) + 1, largest = i;
119+
if (left < heap.size() && heap[left] > heap[largest])
120+
largest = left;
121+
if (right < heap.size() && heap[right] > heap[largest])
122+
largest = right;
123+
if (largest == i)
124+
break;
125+
swap(heap[i], heap[largest]);
126+
i = largest;
127+
}
128+
}
129+
};
130+
131+
int main() {
132+
MaxHeap heap;
133+
heap.insert(3);
134+
heap.insert(2);
135+
heap.insert(1);
136+
137+
while (!heap.empty()) {
138+
cout << heap.top() << endl;
139+
heap.remove();
140+
}
141+
}

0 commit comments

Comments
 (0)