我正在用 C 和在开放地址哈希表程序中研究 Master Algorithms,作者定义:void *vacated;
指向哈希表中的空出位置。因此,如果我想连续删除哈希表中的 2 个值。vacated
指向最后一个删除的变量是不可能的,这是真的吗?
如果我想连续删除两个具有相同哈希值的变量。我认为这与删除两个具有不同哈希值的变量不同。
在函数ohtbl_remove
中,我找不到将要删除的变量设为 NULL 的语句。如果我想连续删除变量,它如何管理删除变量?谢谢。
int ohtbl_remove(OHTbl *htbl, void **data) {
int position,
i;
/*****************************************************************************
* *
* Use double hashing to hash the key. *
* *
*****************************************************************************/
for (i = 0; i < htbl->positions; i++) {
position = (htbl->h1(*data) + (i * htbl->h2(*data))) % htbl->positions;
if (htbl->table[position] == NULL) {
/***********************************************************************
* *
* Return that the data was not found. *
* *
***********************************************************************/
return -1;
}
else if (htbl->table[position] == htbl->vacated) {
/***********************************************************************
* *
* Search beyond vacated positions. *
* *
***********************************************************************/
continue;
}
else if (htbl->match(htbl->table[position], *data)) {
/***********************************************************************
* *
* Pass back the data from the table. *
* *
***********************************************************************/
*data = htbl->table[position];
htbl->table[position] = htbl->vacated;
htbl->size--;
return 0;
}
}