JavaAlgorithms/data_structures/PriorityQueues.java

68 lines
1.9 KiB
Java
Raw Normal View History

2016-11-22 06:13:34 +08:00
/*
* A priority queue adds elements into positions based on their priority.
* So the most important elements are placed at the front/on the top.
* In this example I give numbers that are bigger, a higher priority.
* Queues in theory have no fixed size but when using an array implementation it does.
*/
class PriorityQueue{
private int maxSize;
private int[] queueArray;
private int nItems;
public PriorityQueue(int size){ //Constructor
maxSize = size;
queueArray = new int[size];
nItems = 0;
}
public void insert(int value){ //Inserts an element in it's appropriate place
if(nItems == 0){
queueArray[0] = value;
}
else{
int j = nItems;
while(j > 0 && queueArray[j-1] > value){
queueArray[j] = queueArray[j-1]; //Shifts every element up to make room for insertion
2016-11-22 06:13:34 +08:00
j--;
}
queueArray[j] = value; //Once the correct position is found the value is inserted
2016-11-22 06:13:34 +08:00
}
nItems++;
}
public int remove(){ //Remove the element from the front of the queue
return queueArray[--nItems];
}
public int peek(){ //Checks what's at the front of the queue
return queueArray[nItems-1];
}
public boolean isEmpty(){ //Returns true is the queue is empty
return(nItems == 0);
}
public boolean isFull(){ //Returns true is the queue is full
return(nItems == maxSize);
}
public int getSize(){ //Returns the number of elements in the queue
return nItems;
}
}
//Example
public class PriorityQueues{
public static void main(String args[]){
PriorityQueue myQueue = new PriorityQueue(4);
myQueue.insert(10);
myQueue.insert(2);
myQueue.insert(5);
myQueue.insert(3);
//[2, 3, 5, 10] Here higher numbers have higher priority, so they are on the top
for(int i = 3; i>=0; i--)
System.out.print(myQueue.remove() + " "); //will print the queue in reverse order [10, 5, 3, 2]
//As you can see, a Priority Queue can be used as a sorting algotithm
}
}