Получить следующее значение перечисления в C?

#c #dynamic #enumeration #expansion

#c #динамический #перечисление #расширение

Вопрос:

Для класса мне нужно создать динамически расширяющуюся хэш-таблицу, которая расширяется, когда количество привязок достигает определенных значений — 509,1021, 2039, 4093 и т.д. Я понимаю почти все остальное, но я не уверен, как проверить, до какого значения таблица должна расширяться следующим.

Я думаю, что мы должны использовать перечисления, но я не понимаю, как получить «следующее» значение перечисления. Т.Е., Если моя хэш-таблица в настоящее время имеет 1022 привязки, я должен расширить базовый массив до размера 2039, но откуда я знаю, как это сделать? Или я неправильно подхожу к этому?

Заранее извините, если это глупый вопрос, но он не рассматривается в моей книге, и я все еще новичок, когда дело доходит до C.

Комментарии:

1. Я не думаю, что перечисления — это правильный путь; вы не можете перебирать перечисления или индексировать их.

2. Хорошо, спасибо. Я надеялся, что есть / был / способ сделать that…is значит, есть что-нибудь более элегантное, чем массив возможных размеров? Я думаю, я пойду с этим.

3. 509, 1021, 4093 всего на 3 меньше, чем степени 2. (Вы уверены, что 2039 не должен быть 2045?) Вы могли бы просто вычислить их.

4. Нет, один из здешних профессоров (Седжвик) провел исследование «оптимальных» точек для изменения размера, и мы должны их использовать. По крайней мере, это причина, если я помню из моего курса алгоритмов в прошлом году. Полный список: 509, 1021, 2039, 4093, 8191, 16381, 32749, и 65521.

Ответ №1:

Вы не можете использовать перечисления для этой цели в C.

Вероятно, вы хотите поместить пороговые значения в постоянный массив и поддерживать индекс, указывающий на текущий порог:

 const int thresholds[] = { 509, 1021, 2039, 4093 };

int i_thresh = 0;

...

if (num_elements > thresholds[i_thresh])
{
    i_thresh  ;
}
 

Комментарии:

1. Я думаю, я пойду с этим тогда. Спасибо за вашу помощь!