2012-01-30 10 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

0

例外をスローします。

QueueEmptyException( "プライオリティキューが空である")は、そのような

何か。

0

例外をスローする代わりに、ヌルオブジェクトパターン(wiki)を使用して、「何もしない」<T>を返すことができます。

これは不要な複雑さのように思えるかもしれませんが、これはキューへのアクセスに対するtry/catch操作を避けるのに役立ちます。また、有効な動作を処理するために例外を使用するパターンを避けることができます。また、キューが頻繁に空の場合、例外処理が「低速」なのでパフォーマンスの問題が発生する可能性があります。

関連する問題