哈希表线性探测法插入c语言
时间: 2023-12-30 15:23:45 浏览: 81
以下是使用哈希表线性探测法插入元素的C语言示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 30 // 哈希表大小
typedef struct {
char name[20];
} Person;
typedef struct {
Person* data[SIZE];
int occupied[SIZE]; // 记录位置是否被占用,0表示空闲,1表示占用
} HashTable;
int hash(char* name) {
int sum = 0;
for (int i = 0; i < strlen(name); i++) {
sum += name[i];
}
return sum % SIZE; // 除留余数法构造哈希函数
}
void insert(HashTable* table, Person* person) {
int index = hash(person->name);
while (table->occupied[index] == 1) { // 发生冲突,向后遍历寻找空闲位置
index = (index + 1) % SIZE; // 环形遍历
}
table->data[index] = person;
table->occupied[index] = 1;
}
int main() {
HashTable table;
for (int i = 0; i < SIZE; i++) {
table.occupied[i] = 0; // 初始化哈希表,所有位置都为空闲
}
Person* person1 = (Person*)malloc(sizeof(Person));
strcpy(person1->name, "张三");
insert(&table, person1);
Person* person2 = (Person*)malloc(sizeof(Person));
strcpy(person2->name, "李四");
insert(&table, person2);
// 检查哈希表中的元素
for (int i = 0; i < SIZE; i++) {
if (table.occupied[i] == 1) {
printf("位置 %d: %s\n", i, table.data[i]->name);
}
}
return 0;
}
```
阅读全文