From 8b8c66e45faf6b0471847663015b5c466a30a2ae Mon Sep 17 00:00:00 2001 From: zan Date: Wed, 9 Dec 2020 08:02:09 +0800 Subject: [PATCH 1/4] [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 c204d9d38d1a1887c5e56f027814d045f97d96dc Mon Sep 17 00:00:00 2001 From: zan Date: Wed, 9 Dec 2020 08:06:55 +0800 Subject: [PATCH 2/4] update README.md. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e931f2f..9dd8882 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ ### 基础 -1. 实现⼀个小顶堆或者⼤顶堆 +1. 实现小顶堆或者大顶堆 - (1) 定义堆的数据结构 - (2) 实现入堆函数 - (3) 实现出堆函数 @@ -20,7 +20,7 @@ ### 进阶 1. 利用优先级队列合并K个有序数组 -2. 求⼀组动态数据集合的最⼤Top K +2. 求一组动态数据集合的Top K ## 工作流程 -- Gitee From c3305e480f1e72f57694a54a4d78215ca818c675 Mon Sep 17 00:00:00 2001 From: zan Date: Wed, 9 Dec 2020 08:07:50 +0800 Subject: [PATCH 3/4] update README.md. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9dd8882..41aca87 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,8 @@ ### 截止日期 -下次实验课上课前(12.16) +- 基础-1 下次实验课上课前(12.16) +- 基础-2 12.23 ### 基础 -- Gitee From 57b57293e72eb67b8b447b3063359b868d914e20 Mon Sep 17 00:00:00 2001 From: linhong <1375057925@qq.com> Date: Tue, 15 Dec 2020 20:22:29 +0800 Subject: [PATCH 4/4] 26 --- Heap.java | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- Main.java | 18 ++++++++++++ 2 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 Main.java 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.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