简述
- 优先级队列允许访问最小(有时最大)的数据项
- 优先级队列的重要操作是有序地插入新数据项和移除关键字最小的数据项
- 优先级队列是比栈,队列更专用的数据结构在很多的情况下都很有用。
- 像普通队列一样,优先级队列有一个列头和一个列尾,并且也是从对头移除数据项
- 不过在优先级队列中,关键词是有序的
- 数据项插入的时候会按照顺序插入到合适的位置保存队列的顺序
举例
就好比处理文件的时候,当文件堆积了很久了,但是里面有的是很重要的,有的是一般重要的,有的是不重要的,所以在处理文件的时候总会先排列好,先处理重要的文件,其次是处理一半重要的,最后是处理不重要的。
private int maxSize;
private long[] queArray;
private int nItems;
public PriorityQ(int s) {
maxSize = s;
queArray = new long[maxSize];
nItems = 0;
}
// 新增
public void insert(long item) {
int j;
// 判断是不是第一个元素
if (nItems == 0) {//是最小的元素 就把元素放进第一个
queArray[nItems++] = item;
} else {//b不是第一个元素 就找出比他小的元素的后一个
for (j = nItems - 1; j >= 0; j--) {
if (item > queArray[j]) {
queArray[j + 1] = queArray[j];
} else {
break;
}
}
queArray[j + 1] = item;
nItems++;
}
}
// 删除
public long remove() {
return queArray[--nItems];
}
public long peekMin() {
return queArray[nItems - 1];
}
// 判断是否有元素存在
public boolean isEmpty() {
return (nItems == 0);
}
public boolean isFull() {
return (nItems == maxSize);
}
public static void main(String[] args) {
PriorityQ priorityQ = new PriorityQ(5);
priorityQ.insert(59);
priorityQ.insert(12);
priorityQ.insert(23);
priorityQ.insert(43);
priorityQ.insert(25);
while (!priorityQ.isEmpty()) {
long item = priorityQ.remove();
System.out.print(item +" ,");
}
System.out.println(" ");
}
输出