2013-11-26 25 views
0

我在構建基於PList的優先級隊列時遇到問題。從本質上講,如果我添加項目,當我運行一個主函數時,它所做的所有事情都會吐出最高和最低優先級值。使用優先級列表的優先級隊列未命中Java中的所有中間值

這裏是我的PQueue插入項目方法

​​

}

這裏是我的鏈接列表::

package se2s03; 

public class PList { 
public char content; 
public int priority; 
public PList next; 

PList(final char a, final int b, final PList ll){ 
    this.content=a; 
    this.priority=b; 
    this.next=ll; 
} 
PList(final char a, final int b){ 
    this.content=a; 
    this.priority=b; 
} 

}

回答

0

下面是一個使用鏈接的優先級隊列實現名單。

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() + ", "); 
    } 
}