C语言写一个,哈希算法
时间: 2023-12-29 21:53:45 浏览: 39
哈希算法是一种将任意大小的数据映射到固定大小的数据的一种方法。下面是一个简单的哈希算法的C语言实现:
```c
#include <stdio.h>
#include <string.h>
#define HASH_SIZE 256
unsigned int hash(char *str)
{
unsigned int hash = 0;
while (*str)
{
hash = hash * 31 + *str++;
}
return hash % HASH_SIZE;
}
int main()
{
char str[256];
printf("Enter a string: ");
scanf("%s", str);
unsigned int h = hash(str);
printf("Hash value of \"%s\" is %u\n", str, h);
return 0;
}
```
这个哈希算法使用了一个简单的方法将字符串映射到一个0到255的整数,该方法在处理字符串时将每个字符乘以一个大素数31,然后将结果累加到哈希值中。最后,将哈希值除以哈希表大小并取余数,以确保它在哈希表中的位置在0到255之间。
相关问题
用c语言写一个哈希算法
### 回答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语言实现示例。在实际应用中,哈希算法可能还需要处理冲突、哈希表的动态扩容等问题,但这个示例可以帮助理解哈希算法的基本原理和实现方式。
用c语言写一个哈希桶算法
哈希桶算法是一种常用的数据结构,它通过将数据的键映射到一个哈希表中的桶来存储数据。哈希桶算法可以提供快速的插入、删除和查找操作,具有较好的平均时间复杂度。
在 C 语言中实现哈希桶算法,需要首先定义一个哈希表的数据结构,其中包含一个桶数组和一些表示哈希表的元数据的字段。
例如,可以定义如下的哈希表数据结构:
```
#define TABLE_SIZE 100
typedef struct {
int key;
int value;
} Pair;
typedef struct {
Pair **buckets;
int size;
} HashTable;
```
接下来,可以定义一个哈希函数,用于将键映射到哈希表中的桶中。例如,可以使用以下的哈希函数:
```
int hash(int key) {
return key % TABLE_SIZE;
}
```
接下来,可以实现哈希表的插入、删除和查找操作。例如,可以使用以下的函数来插入一个键值对:
```
void insert(HashTable *table, int key, int value) {
int index = hash(key);
Pair *pair = (Pair*) malloc(sizeof(Pair));
pair->key = key;
pair->value = value;
table->buckets[index] = pair;
table->size++;
}
```
同样地,可以使用以下的函数来删除一个键值对:
```
void remove(HashTable *table, int key) {
int