C言語でハッシュテーブルを作成する方法は何ですか?
C言語では、次の手順に従ってハッシュテーブルを作成できます。
- ハッシュテーブル構造体を定義し、データを格納するための固定サイズの配列および各位置にデータがあるかどうかを示すフラグ配列の2つのメンバーを含めます。例えば:
#define SIZE 10
typedef struct {
int data[SIZE];
int flags[SIZE];
} HashTable;
- ハッシュテーブルを初期化し、配列内のすべての要素とフラグ配列を初期値(例えば0)に設定します。
void initializeHashTable(HashTable* hashTable) {
int i;
for(i = 0; i < SIZE; i++) {
hashTable->data[i] = 0;
hashTable->flags[i] = 0;
}
}
- ハッシュ関数を実装し、挿入するデータをハッシュテーブルの位置にマップします。一般的なハッシュ関数には、割り算ハッシュ法、乗算ハッシュ法、二乗中間法などがあります。例えば、以下は簡単な割り算ハッシュ法です。
int hashFunction(int key) {
return key % SIZE;
}
- ハッシュテーブルの対応する位置にデータを挿入する挿入操作を実行します。その位置にすでにデータがある場合は、衝突処理戦略(線形探査法、二次探査法、チェイン法など)に従って次に利用可能な位置を見つけます。
void insert(HashTable* hashTable, int key) {
int index = hashFunction(key);
while(hashTable->flags[index] != 0) {
index = (index + 1) % SIZE; // 线性探测法
}
hashTable->data[index] = key;
hashTable->flags[index] = 1;
}
- 与所给关键字相符时,在哈希表中实现查找操作以查找相应的数据。
int search(HashTable* hashTable, int key) {
int index = hashFunction(key);
while(hashTable->flags[index] != 0) {
if(hashTable->data[index] == key) {
return index;
}
index = (index + 1) % SIZE;
}
return -1; // 表示未找到
}
簡単なハッシュテーブルを作成することができます。実際のアプリケーションでは、必要に応じて拡張や削除操作を行うことができます。