Java优先级队列的实现 公共类优先队列{ 私有优先节点头、尾; 私有内部网络; 公共优先级队列(){ numItems=0; head=null; tail=null; } 公共无效添加(整数优先级,T值){ PriorityNode newNode=新的PriorityNode(优先级,值); 如果(numItems==0){ 头=新节点; tail=newNode; } 否则{ head.setNext(newNode); 头=新节点; } } }
其中PriorityNode定义为:Java优先级队列的实现 公共类优先队列{ 私有优先节点头、尾; 私有内部网络; 公共优先级队列(){ numItems=0; head=null; tail=null; } 公共无效添加(整数优先级,T值){ PriorityNode newNode=新的PriorityNode(优先级,值); 如果(numItems==0){ 头=新节点; tail=newNode; } 否则{ head.setNext(newNode); 头=新节点; } } },java,priority-queue,comparator,Java,Priority Queue,Comparator,其中PriorityNode定义为: public class PriorityQueue<T> { private PriorityNode<T> head, tail; private int numItems; public PriorityQueue(){ numItems = 0; head=null; tail=null; } public void add(int priority, T value){ Priorit
public class PriorityQueue<T> {
private PriorityNode<T> head, tail;
private int numItems;
public PriorityQueue(){
numItems = 0;
head=null;
tail=null;
}
public void add(int priority, T value){
PriorityNode<T> newNode = new PriorityNode<T>(priority,value);
if(numItems == 0){
head = newNode;
tail = newNode;
}
else{
head.setNext(newNode);
head = newNode;
}
}
}
public类优先级节点实现可比较{
私人T值;
私有优先节点下一步;
私人优先权;
公共优先级节点(int优先级,T新值){
值=新值;
next=null;
优先级=0;
}
公共优先级节点(T newValue){
值=新值;
next=null;
优先级=0;
}
公共无效设置优先级(整数优先级){
优先权=优先权;
}
public int getPriority(){
返回此项。优先级;
}
公共T getValue(){
返回值;
}
公共优先级节点getNext(){
下一步返回;
}
public void setNext(PriorityNode nextNode){
this.next=nextNode;
}
公共无效设置值(T newValue){
值=新值;
}
@凌驾
公共整数比较(整数优先){
//TODO自动生成的方法存根
if(this.priority不要使用树结构来实现优先级队列。使用a。它更节省空间,需要更少的内存分配,并且对于大多数操作都是O(log(N))。关于比较器的实现,实现or接口需要公共int compareTo(to)
要重写的方法
在给出的示例代码中,compareTo(T)
方法未被重写(定义了compareTo(int)
方法,但这不是相同的方法签名),因此,它可能会导致编译器错误。我认为这对您自己来说太难了,基于数组的堆可以有效地实现优先级队列:更简单、更高效(读取:连续内存区域).没错,但我正试图在考官向我提出这个问题之前完成这种类型的实施。你的问题不完全清楚。什么是“困难”?编译错误?意外结果?链接是关于什么的?!
public class PriorityNode<T> implements Comparable<T> {
private T value;
private PriorityNode<T> next;
private int priority;
public PriorityNode(int priority,T newValue){
value = newValue;
next = null;
priority = 0;
}
public PriorityNode(T newValue){
value = newValue;
next = null;
priority = 0;
}
public void setPriority(int priority){
this.priority = priority;
}
public int getPriority(){
return this.priority;
}
public T getValue(){
return value;
}
public PriorityNode<T> getNext(){
return next;
}
public void setNext(PriorityNode<T> nextNode){
this.next = nextNode;
}
public void setValue(T newValue){
value = newValue;
}
@Override
public int compareTo(int pri) {
// TODO Auto-generated method stub
if(this.priority<pri){
return -1;
}
else if(this.priority == pri){
return 0;
}
else{
return 1;
}
}
}