优先队列上文介绍了一种方法,另一种方法就是在insert()方法中添加代码,将所有较大的元素向右边一定一格以使数组保持有序(和插入排序一样)。这样,最大的元素总会在数组的一边,优先队列的删除最大元素操作就和栈的pop()操作一样了。
用数组实现优先队列:(insert已经进行有序操作。pop操作即为peekMax,remove操作)
public class PriorityQ {
private int maxSize;
private long[] queArray;
private int nItems;
//constructor
public PriorityQ(int s){
maxSize = s;
queArray = new long[maxSize];
nItems = 0;
}
//insert
public void insert(long item){
int j;
if(nItems == 0)
queArray[nItems++] = item;
else{
for(j=nItems-1; j>=0; j--){
if(item > queArray[j])
queArray[j+1] = queArray[j]; //大的数据项放在了后面
else
break;
}//end for
queArray[j+1] = item;
nItems++;
}//end else
}
public long remove(){
return queArray[--nItems];
}
public long peekMin(){
return queArray[nItems - 1];
}
public long peekMax(){
return queArray[0];
}
public boolean isEmpty(){
return nItems == 0;
}
public boolean isFull(){
return nItems == maxSize;
}
}
本文介绍了一种使用数组实现优先队列的方法。该方法通过在插入元素时保持数组有序,确保最大元素始终位于数组的一端,从而使得删除最大元素的操作变得高效。文章详细解释了insert()、remove()等关键方法的具体实现。
&spm=1001.2101.3001.5002&articleId=52781216&d=1&t=3&u=19f70da27faa4f2688187229ff826dcc)
2206

被折叠的 条评论
为什么被折叠?



