用文件读写的操作实现哈希表信息管理系统
时间: 2023-10-11 16:07:03 浏览: 192
对于哈希表信息管理系统,我们可以用文件读写来实现数据的储存和读取。具体实现步骤如下:
1. 定义哈希表结构体和链表结构体
```c
#define MAX_SIZE 1000 // 哈希表最大容量
typedef struct node {
char key[20]; // 关键字
char value[50]; // 值
struct node* next; // 链表指针
} Node;
typedef struct {
int size; // 哈希表大小
Node* data[MAX_SIZE]; // 存储哈希表数据
} HashTable;
```
2. 定义哈希函数
```c
// 哈希函数
int hash(char* str, int size) {
int h = 0;
for (int i = 0; str[i]; i++) {
h = (h * 31 + str[i]) % size;
}
return h;
}
```
3. 定义哈希表的初始化函数
```c
// 哈希表初始化
void initHashTable(HashTable* ht) {
ht->size = MAX_SIZE;
for (int i = 0; i < ht->size; i++) {
ht->data[i] = NULL;
}
}
```
4. 定义哈希表的插入函数
```c
// 哈希表插入元素
void insertHashTable(HashTable* ht, char* key, char* value) {
int h = hash(key, ht->size);
Node* p = ht->data[h];
while (p != NULL) {
if (strcmp(p->key, key) == 0) { // 如果关键字已存在,则更新值
strcpy(p->value, value);
return;
}
p = p->next;
}
// 如果关键字不存在,则插入新节点
Node* newNode = (Node*)malloc(sizeof(Node));
strcpy(newNode->key, key);
strcpy(newNode->value, value);
newNode->next = ht->data[h];
ht->data[h] = newNode;
}
```
5. 定义哈希表的查找函数
```c
// 哈希表查找元素
char* findHashTable(HashTable* ht, char* key) {
int h = hash(key, ht->size);
Node* p = ht->data[h];
while (p != NULL) {
if (strcmp(p->key, key) == 0) { // 如果关键字存在,则返回值
return p->value;
}
p = p->next;
}
// 如果关键字不存在,则返回空指针
return NULL;
}
```
6. 定义文件读写的函数
```c
// 从文件中读取数据到哈希表
void readFromFile(HashTable* ht, char* fileName) {
FILE* fp = fopen(fileName, "r");
if (fp == NULL) {
printf("Failed to open file %s\n", fileName);
return;
}
char key[20], value[50];
while (fscanf(fp, "%s%s", key, value) != EOF) {
insertHashTable(ht, key, value);
}
fclose(fp);
}
// 将哈希表数据写入文件
void writeToFile(HashTable* ht, char* fileName) {
FILE* fp = fopen(fileName, "w");
if (fp == NULL) {
printf("Failed to open file %s\n", fileName);
return;
}
for (int i = 0; i < ht->size; i++) {
Node* p = ht->data[i];
while (p != NULL) {
fprintf(fp, "%s %s\n", p->key, p->value);
p = p->next;
}
}
fclose(fp);
}
```
7. 定义主函数,实现哈希表信息管理系统
```c
int main() {
HashTable ht;
initHashTable(&ht);
readFromFile(&ht, "data.txt");
char key[20], value[50];
int op;
while (1) {
printf("1. 查询\n");
printf("2. 插入/更新\n");
printf("3. 退出\n");
printf("请选择操作:");
scanf("%d", &op);
if (op == 1) {
printf("请输入关键字:");
scanf("%s", key);
char* value = findHashTable(&ht, key);
if (value == NULL) {
printf("未找到该关键字!\n");
} else {
printf("查询结果:%s\n", value);
}
} else if (op == 2) {
printf("请输入关键字和值:");
scanf("%s%s", key, value);
insertHashTable(&ht, key, value);
writeToFile(&ht, "data.txt");
printf("插入/更新成功!\n");
} else if (op == 3) {
break;
} else {
printf("无效操作!\n");
}
}
return 0;
}
```
以上就是用文件读写的操作实现哈希表信息管理系统的完整代码。
阅读全文