2012-01-30 1 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에 빈 검사를 피기 백 (piggyback)하려고했습니다. 감사! – Nemo

0

가 예외를 던져 : 큐 또는 적어도 큐가 비어 있거나없는 경우 항목의 수에 대한 액세스를 소비자 즉 주면 생각.

QueueEmptyException ("우선 순위 큐가 비어") 같은

뭔가.

0

예외를 throw하는 대신 null 객체 패턴 (wiki)을 사용하여 "아무것도하지 않음"<T>을 반환 할 수 있습니다.

이것은 불필요한 복잡성처럼 보일 수 있지만 큐 액세스에 대한 try/catch 작업을 피하는 데 도움이됩니다. 또한 유효한 동작을 처리하기 위해 예외를 사용하지 않는 패턴을 피할 수 있습니다. 또한 큐가 비어있는 경우 종종 예외 처리가 '느리기'때문에 성능 문제가 발생할 수 있습니다.

관련 문제