Здравствуйте!
Извиняюсь, что без тега code (код пишу на виртуальной машине)
Функция на картинке ищет имя в массиве указателей на структуру типа
name* table[TBLSZ]
.
Если нашлось имя - возвращает это значение double. Что-то наподобие переменных, для калькулятора
Код является примером и его автор не я, я не понял несколько вещей в нем:
- Зачем из хеша брать остаток от деления
- Каким образом работает эта связь в виде списка переменных
- Почему nn->next присваивается table[ii]
В общем я не понял принципа связи этого списка. Объясните пожалуйста, зачем так сделано. Строчки помечены breakpoint'ом
struct name {
char* string;
name* next;
double value;
};
const TBLSZ = 23;
name* table[TBLSZ];
name* look(const char* p, int ins =0)
{
int ii = 0; // хэш-код
const char* pp = p;
while (*pp) ii = ii<<1 ^ *pp++;
if (ii < 0) ii = -ii;
ii %= TBLSZ;
for (name* n=table[ii]; n; n=n->next) // поиск
if (strcmp(p,n->string) == 0) return n;
if (ins == 0) error("имя не найдено");
name* nn = new name; // занесение
nn->string = new char[strlen(p)+1];
strcpy(nn->string,p);
nn->value = 1;
nn->next = table[ii];
table[ii] = nn;
return nn;
}