Skip to content

Commit ba3409e

Browse files
committed
Add PriorityQueue
1 parent 6b6f7a9 commit ba3409e

4 files changed

Lines changed: 78 additions & 1 deletion

File tree

src/main/java/org/alda/Main.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,16 @@
1313
import org.alda.structure.queue.Queue;
1414
import org.alda.structure.queue.array.QueueArray;
1515
import org.alda.structure.queue.linkedList.QueueLinkedList;
16+
import org.alda.structure.queue.priority.IPriorityQueue;
17+
import org.alda.structure.queue.priority.PriorityQueue;
1618
import org.alda.structure.stack.array.IStackArray;
1719
import org.alda.structure.stack.array.StackArray;
1820
import org.alda.structure.stack.linkedList.IStackLinkedList;
1921
import org.alda.structure.stack.linkedList.StackLinkedList;
2022

2123
public class Main {
2224
public static void main(String[] args) {
23-
testQueue();
25+
testPriorityQueue();
2426
}
2527
public static void testSimpleLinkedList() {
2628
ISimpleLinkedList<Integer> intList = new SimpleLinkedList<Integer>();
@@ -183,4 +185,25 @@ public static void testQueueLinkedList(){
183185
System.out.println(front);
184186
System.out.println(rear);
185187
}
188+
189+
public static void testPriorityQueue(){
190+
IPriorityQueue<Integer> intQueue = new PriorityQueue<>();
191+
192+
intQueue.enqueue(2, 1);
193+
intQueue.enqueue(32, 25);
194+
intQueue.enqueue(48, 0);
195+
intQueue.enqueue(15, 3);
196+
intQueue.enqueue(36, 2);
197+
intQueue.enqueue(27, 4);
198+
199+
Integer item = intQueue.dequeue();
200+
Integer item1 = intQueue.dequeue();
201+
Integer item2 = intQueue.dequeue();
202+
Integer item3 = intQueue.dequeue();
203+
204+
System.out.println(item);
205+
System.out.println(item1);
206+
System.out.println(item2);
207+
System.out.println(item3);
208+
}
186209
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package org.alda.structure.queue.priority;
2+
3+
public interface IPriorityQueue<T> {
4+
void enqueue(T element, Integer priority);
5+
T dequeue();
6+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.alda.structure.queue.priority;
2+
3+
public class Node<T> {
4+
public T data;
5+
public Integer priority;
6+
public Node<T> next;
7+
8+
public Node(T data, Integer priority){
9+
this.data = data;
10+
this.priority = priority;
11+
}
12+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.alda.structure.queue.priority;
2+
3+
import org.alda.common.Comparer;
4+
5+
public class PriorityQueue<T> implements IPriorityQueue<T> {
6+
private Node<T> head;
7+
8+
public void enqueue(T data, Integer priority) {
9+
Node<T> newNode = new Node<>(data, priority);
10+
Node<T> current = null;
11+
if(head == null) {
12+
newNode.next = head;
13+
head = newNode;
14+
} else if (Comparer.compare(head.priority, newNode.priority) >= 0) {
15+
newNode.next = head;
16+
head = newNode;
17+
} else {
18+
current = head;
19+
while (current.next != null && Comparer.compare(current.next.priority, newNode.priority) < 0) {
20+
current = current.next;
21+
}
22+
newNode.next = current.next;
23+
current.next = newNode;
24+
25+
}
26+
}
27+
28+
public T dequeue() {
29+
if(head == null) {
30+
return null;
31+
}
32+
Node<T> current = head;
33+
head = head.next;
34+
return current.data;
35+
}
36+
}

0 commit comments

Comments
 (0)