用C语言编写二次探测再散列的哈希查找
时间: 2024-02-28 19:54:10 浏览: 81
好的,以下是用C语言编写的二次探测再散列的哈希查找的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
int hash(int key) {
return key % SIZE;
}
int hash2(int key) {
return 7 - (key % 7);
}
int hashSearch(int hashTable[], int key) {
int index = hash(key);
int h2 = hash2(key);
int i = 0;
while (hashTable[(index + i * h2) % SIZE] != -1) {
if (hashTable[(index + i * h2) % SIZE] == key) {
return (index + i * h2) % SIZE;
}
i++;
}
return -1;
}
void hashInsert(int hashTable[], int key) {
int index = hash(key);
int h2 = hash2(key);
int i = 0;
while (hashTable[(index + i * h2) % SIZE] != -1) {
i++;
}
hashTable[(index + i * h2) % SIZE] = key;
}
int main() {
int hashTable[SIZE];
for (int i = 0; i < SIZE; i++) {
hashTable[i] = -1;
}
hashInsert(hashTable, 5);
hashInsert(hashTable, 25);
hashInsert(hashTable, 15);
hashInsert(hashTable, 35);
printf("Key 15 found at index %d\n", hashSearch(hashTable, 15));
printf("Key 35 found at index %d\n", hashSearch(hashTable, 35));
printf("Key 5 found at index %d\n", hashSearch(hashTable, 5));
printf("Key 25 found at index %d\n", hashSearch(hashTable, 25));
printf("Key 10 not found, returned index %d\n", hashSearch(hashTable, 10));
return 0;
}
```
在上述代码中,我们定义了两个哈希函数,`hash()` 和 `hash2()`。`hash()` 函数用于计算键的初始哈希值,`hash2()` 函数用于计算键的二次哈希步长。
`hashSearch()` 函数用于在哈希表中查找给定的键。它使用二次探测再散列的方法来解决哈希冲突。如果键存在于哈希表中,则返回键的索引。如果键不存在于哈希表中,则返回 -1。
`hashInsert()` 函数用于将键插入哈希表中。它也使用二次探测再散列的方法来解决哈希冲突。
在 `main()` 函数中,我们首先初始化哈希表。然后插入一些键值对,并使用 `hashSearch()` 函数查找这些键的索引。最后,我们查找一个不存在于哈希表中的键,并检查 `hashSearch()` 函数是否返回了 -1。
希望这个示例能够帮助你理解如何使用C语言编写二次探测再散列的哈希查找。
阅读全文