2016-12-04 53 views
-4

隊列我寫了一個隊列ADT但我需要的隊列排序整數是descendingly.Here到目前爲止,我已經做了代碼: 零件我代碼的隊列:如何排序整數

public class NewPriorityQueue<T> { 

    private Node firstNode = null; 
    private Node lastNode = null; 
    private int queueLength = 0; 

    @Override 
    public void enqueue(T newEntry, int priority) { 
    Node newNode = new Node(newEntry, priority); 
    Node current = firstNode; 
    if (current != null && newNode.priority > 0) { 
     newNode.next = current; 
     current = newNode; 
    } 
    if (isEmpty()) { 
     firstNode = newNode; 
     lastNode = newNode; 
    } else { 
     firstNode = current; 
    } 
    queueLength++; 
    } 

代碼來進行測試:

public static void main(String[] args) { 
    PriorityQueueInterface<Character> queue = new NewPriorityQueue<>(); 
    queue.enqueue('e'); 
    queue.enqueue('f',10); 
    queue.enqueue('g',20); 
    queue.enqueue('h',5); 
    System.out.print(queue.dequeue()); 
    System.out.print(queue.dequeue()); 
    System.out.print(queue.dequeue()); 
    System.out.print(queue.dequeue()); 
    } 

的espected結果應該gfhe,但我不知道如何對它進行排序。有什麼方法可以輕鬆排序隊列嗎?

+0

歡迎來到Stack Overflow!看起來你正在尋求作業幫助。雖然我們本身沒有任何問題,但請觀察這些[應做和不應該](http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions/338845#338845),並相應地編輯您的問題。 –

回答

0

與您的代碼的問題是,你是不是通過隊列

public void enqueue(T newEntry, int priority) { 
    Node newNode = new Node(newEntry, priority); 
    Node current = firstNode; 

    // if queue is empty, just insert the node 
    if (current == null) { 
     current = newNode; 
     newNode.setNext(null); 
    } else { 
     Item next = current; 
     Item prev = next; 

     // loop through the queue to find the correct point of insertion 
     do { 
      if (priority > next.getPriority()) { 
       // break and insert 
       break; 
      } 
      prev = next; 
      next = next.getNext(); 
     } while (next != null); 

     newNode.setNext(next); 
     // the edge case to see if the newNode has greatest priority 
     if (newNode.getPriority() > firstNode.getPriority()) { 
      current = newNode; 
     } else prev.setNext(newNode); 
    } 
    queueLength++; 
} 
0

我認爲你正試圖重新發明輪子循環。 Java爲你提供了幾乎所有的開箱即用功能。你有幾種選擇可供選擇

  1. 看看LinkedList類。它實現了ListQueue的接口。所以你可以寫一個你想成爲節點的類,比如說你叫它MyNode你需要編寫你自己的Comarator或者讓你的類實現接口Comparable。然後你創建一個List<MyNode> myList = new LinkedList<MyNode>();你現在可以使用Collections的排序方法sort()對你的列表進行排序,你可以用它作爲隊列。只需執行Queue myQueue =(隊列)myList;並將其用作隊列

  2. 您的其他選項是使用TreeMap來實現接口SortedMap,並且您將在此映射中將您的節點保存在您的優先級中作爲關鍵字。

我個人比較喜歡第一選項,但它是品味映射器。