Skip to content

Commit 0705384

Browse files
authored
Merge pull request TheAlgorithms#1320 from Ritik2604/master
Created GenericHeap
2 parents 8e47ae2 + 72258d4 commit 0705384

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

DataStructures/Heaps/GenericHeap

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import java.util.*;
2+
3+
public class GenericHeap <T extends Comparable <T> >{
4+
ArrayList <T> data=new ArrayList<>();
5+
HashMap<T,Integer> map=new HashMap<>();
6+
public void add(T item) {
7+
this.data.add(item);
8+
map.put(item,this.data.size()-1);//
9+
upHeapify(this.data.size()-1);
10+
}
11+
private void upHeapify(int ci) {
12+
int pi=(ci-1)/2;
13+
if(isLarger(this.data.get(ci),this.data.get(pi))>0) {
14+
swap(pi,ci);
15+
upHeapify(pi);
16+
}
17+
}
18+
public void display() {
19+
System.out.println(this.data);
20+
}
21+
public int size() {
22+
return this.data.size();
23+
}
24+
public boolean isEmpty() {
25+
return this.size()==0;
26+
}
27+
public T remove() {
28+
this.swap(0,this.size()-1);
29+
T rv=this.data.remove(this.size()-1);
30+
downHeapify(0);
31+
map.remove(rv);
32+
return rv;
33+
}
34+
private void downHeapify(int pi) {
35+
int lci=2*pi+1;
36+
int rci=2*pi+2;
37+
int mini=pi;
38+
if(lci<this.size() && isLarger(this.data.get(lci),this.data.get(mini))>0) {
39+
mini=lci;
40+
}
41+
if(rci<this.size() && isLarger(this.data.get(rci),this.data.get(mini))>0) {
42+
mini=rci;
43+
}
44+
if(mini!=pi) {
45+
this.swap(pi,mini);
46+
downHeapify(mini);
47+
}
48+
}
49+
public T get() {
50+
return this.data.get(0);
51+
}
52+
//t has higher property then return +ve
53+
private int isLarger(T t,T o) {
54+
return t.compareTo(o);
55+
}
56+
private void swap(int i,int j) {
57+
T ith=this.data.get(i);
58+
T jth=this.data.get(j);
59+
this.data.set(i,jth);
60+
this.data.set(j,ith);
61+
map.put(ith,j);
62+
map.put(jth,i);
63+
}
64+
public void updatePriority(T item) {
65+
int index=map.get(item);
66+
//because we enter lesser value then old vale
67+
upHeapify(index);
68+
}
69+
}

0 commit comments

Comments
 (0)