私は C を使用してマスター アルゴリズムを研究しており、オープン アドレス ハッシュ テーブル プログラムで、著者は次のように定義void *vacated;
しました。ハッシュ テーブル内の空いた位置を指す。したがって、ハッシュテーブルの2つの値を連続して削除したい場合。vacated
最後に削除された変数を指すようにできないというのは本当ですか?
同じハッシュ値の 2 つの変数を連続して削除したい場合。これは、ハッシュ値が異なる 2 つの変数を削除することとは異なると思います。
functionohtbl_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;
}
}