package day1_29;
public class Link {
public long dDate;
public Link next;
public Link(long dDate){
this.dDate = dDate;
}
//打印链结点的方法
public void displayLink(){
System.out.println("["+dDate+"]");
}
}
==================================================
package day1_29;
public class SortedList {
private Link first;
public SortedList(){
first = null;
}
//判断链表是不是为空
public boolean isEmpty(){
if(first == null){
return true;
}else{
return false;
}
}
//插入一个元素的实现
public void insert(long key){
Link newLink = new Link(key);
Link current = first;
Link previous = null;
while(current != null && key >current.dDate){
previous = current;
current = current.next;
}
if(previous == null){//在头节点的时候
first = newLink;
}else
previous.next = newLink;
newLink.next = current;
}
//删除节点的实现
public Link remove(){//删除头结点的方法,只能删除头节点,为了符合队列的性质
Link temp = first;
first = first.next;
return temp;
}
//打印链表的实现
public void displayList(){
Link current = first;
while(current != null){
current.displayLink();
current = current.next;
}
System.out.println();
}
}
================================================
package day1_29;
public class PriorityQ {
private SortedList sortedList;
public PriorityQ(){
sortedList = new SortedList();
}
//队列的插入方法
public void insert(long item){
sortedList.insert(item);
}
//删除的方法
public long remove(){
return sortedList.remove().dDate;
}
//判断是不是为空
public boolean isEmpty(){
return sortedList.isEmpty();
}
//打印的方法
public void display(){
sortedList.displayList();
}
}
==========================================
package day1_29;
public class Practice5_1 {
/**
* 实现一个基于有序链表的优先级队列,队列的删除操作应该删除具有最小关键字
* 的链结点
*/
public static void main(String[] args) {
PriorityQ priorityQ = new PriorityQ();
priorityQ.insert(11);
priorityQ.insert(33);
priorityQ.insert(22);
priorityQ.insert(55);
priorityQ.insert(44);
priorityQ.display();
}
}