@sddvxd

Что означают части этого кода?

Здравствуйте!
Извиняюсь, что без тега code (код пишу на виртуальной машине)

Функция на картинке ищет имя в массиве указателей на структуру типа name* table[TBLSZ].
Если нашлось имя - возвращает это значение double. Что-то наподобие переменных, для калькулятора
Код является примером и его автор не я, я не понял несколько вещей в нем:
  • Зачем из хеша брать остаток от деления
  • Каким образом работает эта связь в виде списка переменных
  • Почему nn->next присваивается table[ii]

В общем я не понял принципа связи этого списка. Объясните пожалуйста, зачем так сделано. Строчки помечены breakpoint'ом
breakpoints
5c1d60f09d03a491674048.png
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;
}
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы