用c语言写一个哈希算法
时间: 2023-08-31 13:24:54 浏览: 141
### 回答1:
我不是很了解C语言,但是我可以尝试给出一个哈希算法的实现: unsigned int hash(char *str)
{
unsigned int hash = 5381;
int c;
while (c = *str++)
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return hash;
}
### 回答2:
哈希算法是一种常用的数据加密和数据查找技术。在C语言中,我们可以使用多种方法来实现哈希算法。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <string.h>
// 定义哈希表的大小
#define SIZE 100
// 哈希表结构体
typedef struct {
char key[20]; // 存储关键字的字符串
int value; // 存储关键字对应的值
} HashTable;
// 哈希函数:将关键字转化为数字索引
int hash(char* key) {
int sum = 0;
for (int i = 0; i < strlen(key); i++) {
sum += key[i];
}
return sum % SIZE;
}
// 插入关键字和值到哈希表中
void insert(HashTable* table, char* key, int value) {
int index = hash(key);
strcpy(table[index].key, key);
table[index].value = value;
}
// 从哈希表中查找关键字的值
int search(HashTable* table, char* key) {
int index = hash(key);
return table[index].value;
}
int main() {
HashTable table[SIZE]; // 定义一个哈希表
// 初始化哈希表
for (int i = 0; i < SIZE; i++) {
strcpy(table[i].key, "");
table[i].value = 0;
}
// 插入关键字和值到哈希表中
insert(table, "apple", 10);
insert(table, "banana", 20);
insert(table, "cat", 30);
// 在哈希表中查找关键字的值
printf("apple: %d\n", search(table, "apple"));
printf("banana: %d\n", search(table, "banana"));
printf("cat: %d\n", search(table, "cat"));
return 0;
}
```
该示例中的哈希函数使用了简单的ASCII码之和作为索引计算方法,将关键字转化为数字索引并存储到哈希表中。通过调用插入和搜索函数,我们可以在哈希表中插入关键字和对应的值,并通过关键字查找其对应的值。在这个示例中,我们插入了三个关键字"apple"、"banana"和"cat",并通过搜索函数打印了相关值。
### 回答3:
哈希算法是一种将数据映射为固定长度的哈希值的算法。它通常用于数据的存储和检索。下面是一个用C语言实现的简单哈希算法的示例:
1. 首先,我们需要定义一个固定长度的哈希表,可以使用数组来实现。假设我们的哈希表长度为10。
```c
#define TABLE_SIZE 10
int hashTable[TABLE_SIZE];
```
2. 接下来,我们需要实现一个哈希函数,该函数将根据数据的特征将数据映射为哈希表中的索引。在这个例子中,我们简单地使用数据除以哈希表长度的余数作为索引。
```c
int hashFunction(int data) {
return data % TABLE_SIZE;
}
```
3. 然后,我们需要实现插入数据到哈希表的函数。该函数将使用哈希函数将数据映射为索引,并将数据插入到对应的索引位置。
```c
void insertData(int data) {
int index = hashFunction(data);
hashTable[index] = data;
}
```
4. 最后,我们可以实现一个检索函数,根据给定的数据,在哈希表中查找并返回对应的索引位置。
```c
int searchData(int data) {
int index = hashFunction(data);
return hashTable[index];
}
```
以上是一个简单的哈希算法的C语言实现示例。在实际应用中,哈希算法可能还需要处理冲突、哈希表的动态扩容等问题,但这个示例可以帮助理解哈希算法的基本原理和实现方式。
阅读全文