数据结构为空时返回什么?

时间:2012-01-30 03:25:59

标签: c# data-structures

我正在实施一个通用优先级队列作为家庭作业项目的一部分。我想知道当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;
    }
}

3 个答案:

答案 0 :(得分:4)

我会在这里的框架类中寻找指导,即Queue<T> - 如果您尝试从空队列中取出项目,则会抛出InvalidOperationException。这只是有意义的,但是如果你让消费者访问队列中的项目数,或者至少如果队列是空的,那就是:

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

public int Count
{
  get 
  {
    return heapSize;
  }
}

答案 1 :(得分:0)

抛出异常。

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

类似的东西。

答案 2 :(得分:0)

抛出异常的替代方法是使用空对象模式(wiki)来返回&lt; T&gt;。 “什么都不做”。

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