2012-01-30 50 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操作。它還避免了使用異常處理有效行爲的反模式,並且如果您的隊列通常是空的,這也可能會導致性能問題,因爲異常處理「緩慢」。

相關問題