优先级队列是指按照数据优先级进行存储的队列。
class priolink{
Entry head;
public priolink(){
this.head=new Entry();
}
class Entry{
int data;
int prio;//data优先级
Entry next;
public Entry(){//不含参数的额构造函数
this.data=-1;
this.prio=-1;
this.next=null;
}
public Entry(int data,int prio){//含参数的额构造函数
this.data=data;
this.prio=prio;
this.next=null;
}
}
//插入数据
public void insert(int data,int prio){
Entry entry=new Entry(data,prio);
Entry cur= this.head;//让cur指向头结点
if(head.next==null){//如果头结点指向的结点是空的
head.next=entry;//直接让头结点指向entry
}
else if(cur.prio<entry.prio&&head.next!=null){//如果头结点指向的结点不为空,并且头结点之后的结点优先级比entry的优先级高
cur=cur.next;//直接把entry插入到优先级合适的位置
entry.next=cur.next;
cur.next=entry;
}
}
//打印这个队列
public void show(){
Entry cur=this.head.next;
while(cur!=null){
System.out.println(cur.data);
cur=cur.next;
}
}
//出队
public void pop(){
Entry cur=this.head.next;//让头结点指向第二个结点就行
this.head.next=cur.next;
}
}
public class test3 {
public static void main(String[] args) {
priolink t1= new priolink();
t1.insert(5, 1);
t1.insert(5, 10);
t1.insert(1, 3);
t1.insert(2, 2);
t1.show();
System.out.println("==出队后====");
t1.pop();
t1.show();
}
}
运行结果
5
2
1
5
==出队后====
2
1
5