From e903f37ea39b8361cb14926c3ecf2d31fd334ed2 Mon Sep 17 00:00:00 2001 From: Kruti Shah Date: Thu, 20 Feb 2025 03:14:28 +0530 Subject: [PATCH] priority queue implementation added --- .../clients/module8/PriorityQueueClient.java | 18 +++++ module8/build.gradle | 1 + .../hithomelabs/princeton1/module8/Heap.java | 2 +- .../princeton1/module8/PriorityQueue.java | 66 +++++++++++++++++++ 4 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 clients/src/main/java/com/hithomelabs/clients/module8/PriorityQueueClient.java create mode 100644 module8/src/main/java/com/hithomelabs/princeton1/module8/PriorityQueue.java diff --git a/clients/src/main/java/com/hithomelabs/clients/module8/PriorityQueueClient.java b/clients/src/main/java/com/hithomelabs/clients/module8/PriorityQueueClient.java new file mode 100644 index 0000000..52817ab --- /dev/null +++ b/clients/src/main/java/com/hithomelabs/clients/module8/PriorityQueueClient.java @@ -0,0 +1,18 @@ +package com.hithomelabs.clients.module8; + +import com.hithomelabs.princeton1.common.Apple; +import com.hithomelabs.princeton1.module8.PriorityQueue; + +import java.util.Random; + +public class PriorityQueueClient { + public static void main(String[] args){ + PriorityQueue priorityQueue = new PriorityQueue<>(); + for(int i=0; i<100; i++){ + priorityQueue.enqueue(new Apple(new Random().nextInt(100))); + } + while (!priorityQueue.isEmpty()){ + System.out.println(priorityQueue.dequeue()); + } + } +} diff --git a/module8/build.gradle b/module8/build.gradle index 9a03430..a835b62 100644 --- a/module8/build.gradle +++ b/module8/build.gradle @@ -13,6 +13,7 @@ dependencies { testImplementation platform('org.junit:junit-bom:5.10.0') testImplementation 'org.junit.jupiter:junit-jupiter' implementation project(':module5') + implementation project(':module4') testImplementation project(':common') } diff --git a/module8/src/main/java/com/hithomelabs/princeton1/module8/Heap.java b/module8/src/main/java/com/hithomelabs/princeton1/module8/Heap.java index 4016054..85d250f 100644 --- a/module8/src/main/java/com/hithomelabs/princeton1/module8/Heap.java +++ b/module8/src/main/java/com/hithomelabs/princeton1/module8/Heap.java @@ -32,7 +32,7 @@ public class Heap implements MeasurableHelper { } // * * Swim if element is not root, and parent is lesser than node - public static > void swim(T[] arr, int node, int N, Comparator cmp, SortingMetaData metaData){ + public static void swim(T[] arr, int node, int N, Comparator cmp, SortingMetaData metaData){ while(node > 1){ if(! MeasurableHelper.less(arr[node/2],arr[node], cmp, metaData)) break; MeasurableHelper.exch(arr, node, node/2, metaData); diff --git a/module8/src/main/java/com/hithomelabs/princeton1/module8/PriorityQueue.java b/module8/src/main/java/com/hithomelabs/princeton1/module8/PriorityQueue.java new file mode 100644 index 0000000..b6824ab --- /dev/null +++ b/module8/src/main/java/com/hithomelabs/princeton1/module8/PriorityQueue.java @@ -0,0 +1,66 @@ +package com.hithomelabs.princeton1.module8; + +import com.hithomelabs.princeton1.module4.Queue; +import com.hithomelabs.princeton1.module5.ComparableHelper; + +import java.util.Iterator; + +public class PriorityQueue extends Queue implements ComparableHelper { + private int size; + private E[] arr; + private static final int CAPACITY = 100; + private int capacity; + + public PriorityQueue(){ + this(CAPACITY); + } + + public PriorityQueue(int capacity){ + arr = (E[]) new Object[capacity+1]; + this.capacity = capacity; + } + + @Override + public boolean isEmpty() { + return size == 0; + } + + @Override + public E dequeue() { + if(isEmpty()) + return null; + E value = arr[1]; + ComparableHelper.exch(arr, 1, size); + arr[size--] = null; + Heap.sink(arr, 1, size, null, null); + return value; + } + + @Override + public void enqueue(E element) { + arr[++size] = element; + Heap.swim(arr, size, size, null, null); + } + + @Override + public int size() { + return size; + } + + @Override + public Iterator iterator() { + return new Iterator() { + + int index = 1; + @Override + public boolean hasNext() { + return index <= size; + } + + @Override + public Object next() { + return arr[index++]; + } + }; + } +}