From 8b8c66e45faf6b0471847663015b5c466a30a2ae Mon Sep 17 00:00:00 2001 From: zan Date: Wed, 9 Dec 2020 08:02:09 +0800 Subject: [PATCH 1/2] [add] template code --- Heap.java | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Heap.java diff --git a/Heap.java b/Heap.java new file mode 100644 index 0000000..dd6535a --- /dev/null +++ b/Heap.java @@ -0,0 +1,30 @@ + +public class Heap>{ + public T[] heap; + public int SIZE; + public int count; + + Heap(int size){ + SIZE = size; + // reference: https://stackoverflow.com/questions/34827626/cannot-be-cast-to-ljava-lang-comparable + heap = (T[])new Comparable[SIZE]; + count = 0; + } + + + public void add (T item){ + if(count >= SIZE){ + // throw new Exception("Heap Overflow"); + System.out.println("Heap Full"); + return; + } + + } + + public void delete(T item){ + + } + + public void print(){ + } +} \ No newline at end of file -- Gitee From 9549232c55fe6cf60a8cc48060b57151f2f26e59 Mon Sep 17 00:00:00 2001 From: luoyang <1822848007@qq.com> Date: Tue, 15 Dec 2020 16:17:52 +0800 Subject: [PATCH 2/2] 12.15 --- Heap.class | Bin 0 -> 2191 bytes Heap.java | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++-- Main.class | Bin 0 -> 594 bytes Main.java | 18 ++++++++++++ 4 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 Heap.class create mode 100644 Main.class create mode 100644 Main.java diff --git a/Heap.class b/Heap.class new file mode 100644 index 0000000000000000000000000000000000000000..7ec9673854fbe72abf0e956a980eee660aade6fa GIT binary patch literal 2191 zcmaJ>U2{`a6kR9xCTWseJ_;?ABtQX6lG+9W0+uEqrG;WCm4sqj(cUK45=@g!NJQWL z6U;a`^3oR`#F2E=k@4AgAN&vg0G&Z_?Q<_Cb*hueKIfi&&RTo#wa@wGQ19rtJqEF79%$AKajxvi5X4kuQ$pP zh>?)3fs#{knxxyGNN&$0CzCpx-hW^(*B(?oM5boVH)?dv+YLv6BR41SmMf(NyHaKX zns$k+v)!wKOXamSr=gIUD2$J9OFTi&-1%IW@5bsqr`Tj!!}(gPQFNxuQm4>W>M|yp zSU8Hbg~J$9*t?xb7Gj87ID(-d-nXy_#-)!Ro^DktK`dMN0Cy~m;FyIE@sWi$F-rNu z7RGRg+IK+nO;&O3Qj3W?4GSxRSQLwES$n=3vY=zgR>Uimf1O+r5+Nn!mbXO zo7k46{O9+Z&N@}9wOG=Aw+iK2dS1jMxnr-h5PLMn)@6mDR=7fi`n$Ww4OurxsHhv) zDb)V8$18D?ss`+O-KkQ+(Qc5}8@goKQVIsOW&dl^|JmQuthu|W+Lk8t&SHqyFv{C+ zK#72~2l?g0A$1$GTgi1x9!Iw&X2j5RHeunuB{*>_y zfv4P{FiblDKWz{udJsYw`v@0>YG;ENN%ZtOuH_VRZS{qzms1WA+hGE-TUBvbseAH9@5qs!!a zI{FBsQM2T)WQ8@F5gW^VkBASs_?HN5U`Hw%Yr~37Y`pqal62XJnHpG6lNAj!J*nqm zQXQpDvW6q9_RFk?t}r6h&VN*#OKjGL*}GD8AB3SQdRyc!P1sM96} z7IR-Q^;n#e#j_i)evdsNtgD$@!OLvLDfY`1_Q;G*CrJMb3@8qKXFS{@yV&5-vs(Ur z4>6cZ#bW-u=1Lp;Ir?SXzya+Ze285g?*_~+)*TvVj{R_hMV!-&0T_q+FY=|6H_anF zLwX_X)!@;`@S9JJPVg>Fo^4lPLoH|+ws(Z5`5JD6VXpiK#u71>iE*bJgU_mmvB)T- zDThUxtrsH3rNCqK#vdUV)mcV60lL*)Wo3)(%@VKL$C@An;{}`lq7oV0yEu;XT9k>u E0SgO^{{R30 literal 0 HcmV?d00001 diff --git a/Heap.java b/Heap.java index dd6535a..8f78d19 100644 --- a/Heap.java +++ b/Heap.java @@ -11,20 +11,96 @@ public class Heap>{ count = 0; } - public void add (T item){ if(count >= SIZE){ // throw new Exception("Heap Overflow"); System.out.println("Heap Full"); return; } + heap[count]=item; + percolateUp(count); + count++; + } +private void percolateUp(int count) { + while(count>0){ + int j = (count - 1) / 2; + int arr=heap[count].compareTo(heap[j]); + if(arr<0){ + break; + } + swap(count, j); + count = j; + } } - public void delete(T item){ - + public void swap(int i, int j){ + T temp = heap[i]; + heap[i] = heap[j]; + heap[j] = temp; } + public void print(){ + System.out.print("\n"); + for (T i:heap){ + System.out.print(i+"\t"); + } } + + +public T delete(){ + + T tempmax = heap[0]; + + heap[0] = heap[--count]; + + percolateDown(count, 0); + + heap[count] = null; + return tempmax; + +} + +private int percolateDown(int count, int i) { + + int j; + while(i != (j = ProperParent(count, i))){ + swap(i, j); + + i = j; + } + return i; + +} + +private int ProperParent(int count, int i) { + return RChildValid(count, i) ? Bigger(Bigger(i, i * 2 + 1), i * 2 + 2) : + LChildValid(count, i) ? Bigger(i, i * 2 + 1) : i; +} + +public boolean RChildValid(int n, int i){ + if(i * 2 + 2 < n){ + return true; + } + return false; +} + +public boolean LChildValid(int n, int i){ + if(i * 2 + 1 < n){ + return true; + } + return false; +} + +public int Bigger(int i, int j){ + + int arr=heap[i].compareTo(heap[j]); + if(j < count){ + return arr>0 ? i : j; + } + return i; +} + + } \ No newline at end of file diff --git a/Main.class b/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..8b42cffed5c4e8f1b0987633a52aecc2f0d696c1 GIT binary patch literal 594 zcmYk2+fKqj5QhJ4OBZU@f+xiDDJhc3g~l6aDoF1DP%YnENED?u!Lo$R#eEUu*#9+SYt5HJl_k? z8FV*)&tR0hP027{^?Z5V?=)m^CmL<47#-pH49o6w^-T;!u`T>o@iq)Rzg1F=)@`>R zyvR#WnNu|~A1R*=3p3PxB}Gr^b&d@io7l3kjU5}in6a^keX^(?24`}6z40brLOO9P z>V@>=q~eFNB?AUN5beIKzbddweu^x1lxQx|Y%;96Q-|elrzZk6SA?GE(G>KK*_3S= z5`Na5zG})%%t>0T`ZW4!G%(ntHYhX7iNg`t2MLB*ie^-#eP9mrq?Pp@der><4eimf zM$oGT{S(FziGmqtClw1L&dE6Qu^}@SOR*TjEDXUPD3}v~(+EQ+QUe*n$$`_hlPD0< bF;z=6!3AN}$ah1C_i*rpG@&|#sv-Rk<2-I8 literal 0 HcmV?d00001 diff --git a/Main.java b/Main.java new file mode 100644 index 0000000..0fd25fe --- /dev/null +++ b/Main.java @@ -0,0 +1,18 @@ +class Main { + public static void main(String[] args){ + Heap heap = new Heap(10); + heap.add(0); + + heap.add(3); + heap.add(9); + heap.add(1); + heap.add(5); + heap.add(4); + heap.add(18); + heap.add(21); + heap.print(); + + heap.delete(); + heap.print(); + } +} \ No newline at end of file -- Gitee