Что возвращать, когда структура данных пуста? - PullRequest
2 голосов
/ 30 января 2012

Я реализую общую очередь приоритетов в рамках проекта домашней работы. Мне интересно, что вернуть, когда PriorityQueue пусто. Я не мог вернуть ноль.

Как лучше всего справиться с этим делом? Каков наилучший выбор дизайна при реализации таких структур данных?

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 ]

4 голосов
/ 30 января 2012

Я бы искал руководство в классах фреймворка здесь, то есть Queue<T> - который выдает InvalidOperationException, если вы пытаетесь удалить элемент из пустой очереди.Это имеет смысл, только если вы предоставляете потребителям доступ к количеству элементов в очереди или, по крайней мере, если очередь пуста или нет, то есть:

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

public int Count
{
  get 
  {
    return heapSize;
  }
}
0 голосов
/ 30 января 2012

Альтернативой выбрасыванию исключения является использование шаблона нулевого объекта ( wiki ) для возврата , который "ничего не делает".

Это может показаться ненужным осложнением, но это поможет вам избежать операций try / catch при доступе к очереди. Это также позволяет избежать использования шаблона исключений для обработки допустимого поведения, и если ваша очередь часто пуста, это также может вызвать проблемы с производительностью, так как обработка исключений является «медленной».

0 голосов
/ 30 января 2012

Бросить исключение.

QueueEmptyException («Приоритетная очередь пуста»)

Что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...