2012-01-30 88 views
2

我正在实现一个通用的优先级队列作为家庭作业项目的一部分。我想知道当PriorityQueue为空时要返回什么。我无法返回null。数据结构为空时返回什么?

处理这种情况的最佳方法是什么?实施这种数据结构时最好的设计选择是什么?

class PQueue<T> : IPQueue<T> 
{ 
    T[] items; 
    //.. 

    public T RemoveMax() 
    { 
     if(heapSize < 1) //Heap Empty 
      return default(T); 

     T max = items[0]; 
     //.. 

     return max; 
    } 
} 

回答

4

我会找指导这里的框架类,即Queue<T> - 如果你试图从空队列中出列的项目,其引发InvalidOperationException。这仅是有道理但如果你让消费者获得的项目数量在队列中,或者至少如果队列为空,即:

public bool IsEmpty() 
{ 
    return heapSize == 0; 
} 

public int Count 
{ 
    get 
    { 
    return heapSize; 
    } 
} 
+0

这是一个不错的选择。我试图将空支票附在RemoveMax上。谢谢! – Nemo 2012-01-30 03:33:09

0

抛出一个异常。

QueueEmptyException( “优先级队列为空”)

类似的东西。

0

抛出异常的替代方法是使用空对象模式(wiki)返回“无效”的<T>。

这可能看起来像不必要的复杂,但这将帮助您避免对队列访问进行try/catch操作。它还避免了使用异常处理有效行为的反模式,并且如果您的队列通常是空的,这也可能会导致性能问题,因为异常处理“缓慢”。

相关问题