优先队列
public class PriorityQueue {
public PriorityQueue(int size) {
this.array = new int[size];
this.size = 0;
}
private int[] array;
private int size;
public void downAdjust(int n, int i) {
int left = 2 * i + 1;
while (left < n) {
int maxPos = array[left] > array[i] ? left : i;
maxPos = (left + 1 ) < n && array[left + 1] > array[maxPos] ? left + 1 : maxPos;
if (maxPos == i) {
break;
}
swap(maxPos, i);
i = maxPos;
left = 2 * i + 1;
}
}
public void upAdjust(int i) {
while (array[(i - 1) / 2] < array[i]) {
swap( (i - 1) / 2, i);
i = (i - 1) / 2;
}
}
public void swap(int p, int q) {
int temp = array[p];
array[p] = array[q];
array[q] = temp;
}
public void enQueue(int data) {
if (size >= array.length) {
resize();
}
array[size] = data;
upAdjust(size++);
}
public int deQueue() throws Exception {
if (size <= 0) {
throw new Exception("the queue is empty");
}
int head = array[0];
array[0] = array[--size];
downAdjust(size, 0);
return head;
}
public void resize() {
int newSize = this. size * 2;
int[] newArray = new int[newSize];
System.arraycopy(array, 0, newArray, 0, array.length);
array = newArray;
}
public static void main(String[] args) throws Exception {
PriorityQueue priorityQueue = new PriorityQueue(10);
priorityQueue. enQueue (3);
priorityQueue. enQueue (5);
priorityQueue. enQueue (10);
priorityQueue. enQueue (2);
priorityQueue. enQueue (7);
System.out.println(priorityQueue.deQueue());
System.out.println(priorityQueue.deQueue());
}
}