下面是一個使用鏈接的優先級隊列實現名單。
public class PQueue
{
private Node head;
public boolean isEmpty()
{
return head == null;
}
public void insert(int priority, Object obj)
{
if (head == null)
head = new Node(obj, priority);
else {
Node curr = head, prev = null;
while (curr != null && curr.priority > priority) {
prev = curr;
curr = curr.next;
}
if (prev == null)
head = new Node(obj, priority, head);
else
prev.next = new Node(obj, priority, curr);
}
}
public Object remove()
{
if (head == null)
return null;
Object val = head.val;
head = head.next;
return val;
}
public Object peek()
{
if (head == null)
return null;
return head.val;
}
public String toString()
{
StringBuilder sb = new StringBuilder();
sb.append("[");
Node prnt = head;
while (prnt != null) {
sb.append(prnt.val.toString() + ", ");
prnt = prnt.next;
}
return sb.substring(0, sb.length() - 2) + "]";
}
private class Node
{
Object val;
int priority;
Node next;
Node(Object val, int priority)
{
this(val, priority, null);
}
Node(Object val, int priority, Node next)
{
this.val = val;
this.priority = priority;
this.next = next;
}
}
public static void main(String[] args)
{
PQueue pq = new PQueue();
for (char ch = 'a'; ch <= 'z'; ch++)
pq.insert(ch - 'a', ch);
System.out.println(pq);
while (!pq.isEmpty())
System.out.print(pq.remove() + ", ");
}
}