2016-12-04 48 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,并且您将在此映射中将您的节点保存在您的优先级中作为关键字。

我个人比较喜欢第一选项,但它是品味映射器。