【发布时间】:2016-11-16 15:10:37
【问题描述】:
首先我觉得我应该提一下这是一个任务。我不是在寻找直接的代码答案,只是为了给我指明正确的方向。我们被要求在链表中实现优先级队列。
我正在努力编写 insert() 函数的第一部分。在代码中,我尝试检查head 是否包含任何内容,如果没有,则将head 设置为pqItem。它会这样做,但是当再次调用 insert 以进行第二次插入时,它不会识别 head 中已经有 PQueueItem 并且只是覆盖 head 而不是忽略 if (this.head == null)。我没有正确设置head?
PQueue 类
package ci284.ass1.pqueue;
public class PQueue<T> {
private PQueueItem<T> head;
public static enum ORDER {
ASC, DESC;
}
public static ORDER DEFAULT_ORDER;
private ORDER order;
public PQueue() {
this.order = DEFAULT_ORDER;
head = null;
}
...
public void insert(T data, int priority) {
PQueueItem<T> pqItem = new PQueueItem<T>(data, priority);
PQueueItem<T> temp;
PQueueItem<T> prev;
System.out.println("This is pqItem " + pqItem);
if (this.order == ORDER.DESC || this.order == DEFAULT_ORDER){
if (this.head != null){
System.out.println("Not null " + head);
if (priority <= head.getPriority()){
}
else if (priority > head.getPriority()){
prev = head;
System.out.println(prev);
head.setNext(head);
prev = pqItem;
System.out.println(prev);
}
}
if (this.head == null){
System.out.println("Null " + head);
this.head = pqItem;
System.out.println("Null " + head);
}
}
}
PQueueItem 类
package ci284.ass1.pqueue;
public class PQueueItem<T> {
private int priority;
private T data;
private PQueueItem<T> next;
public PQueueItem(T data, int priority) {
this.data = data;
this.priority = priority;
}
public int getPriority() {
return priority;
}
public void setPriority(int priority) {
this.priority = priority;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public PQueueItem<T> getNext() {
return next;
}
public void setNext(PQueueItem<T> next) {
this.next = next;
}
public String toString() {
return String.format("[%s,%d]", data.toString(), priority);
}
}
插入的 JUnit 测试
@Test
public void testInsertStart(){
PQueue<String> pq = new PQueue<String>();
pq.insert("1",2);
String head = pq.pop();
assertEquals(head, "1");
System.out.println("Worked");
pq.insert("Hiya",3);
assertEquals(head, "Hiya");
}
测试返回:
org.junit.ComparisonFailure: expected:<1> but was:<Hiya>
控制台显示:
This is pqItem [1,2]
Null null
Null [1,2]
Worked
This is pqItem [Hiya,3]
Null null
Null [Hiya,3]
【问题讨论】:
-
你能把你两次调用
insert的代码部分贴出来吗? -
添加调用
-
你能用英语解释一下应该发生什么
if (priority > head.getPriority())吗? -
如果
pqItem的优先级高于head的优先级,它应该替换将head向下移动并在head所在的位置插入pqItem。 -
不要破坏你的问题。这是不允许的。抄送@petermcneil
标签: java