已知一个dimension行len列的double型数组,请用C语言构建哈希表存储该数组,用户通过键盘输入数字查找数组中的某一个元素,如果查找不到则将输入的数字添加到原有哈希表中
时间: 2024-05-01 13:20:43 浏览: 141
以下是一个示例代码,实现了将double型数组存储到哈希表中,并且可以通过用户输入数字查找元素,如果查找不到则将输入的数字添加到原有哈希表中。
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define HASH_SIZE 1000
typedef struct Node {
double val;
struct Node *next;
} Node;
Node *hashTable[HASH_SIZE];
void insert(double val) {
int key = (int)(val * 10) % HASH_SIZE;
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->val = val;
newNode->next = NULL;
if (hashTable[key] == NULL) {
hashTable[key] = newNode;
} else {
Node *cur = hashTable[key];
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = newNode;
}
}
bool search(double val) {
int key = (int)(val * 10) % HASH_SIZE;
Node *cur = hashTable[key];
while (cur != NULL) {
if (cur->val == val) {
return true;
}
cur = cur->next;
}
return false;
}
int main() {
int dimension, len;
printf("请输入数组的行数和列数:");
scanf("%d%d", &dimension, &len);
double array[dimension][len];
printf("请输入数组的元素:\n");
for (int i = 0; i < dimension; i++) {
for (int j = 0; j < len; j++) {
scanf("%lf", &array[i][j]);
insert(array[i][j]);
}
}
double val;
printf("请输入要查找的元素:");
scanf("%lf", &val);
if (search(val)) {
printf("元素%.2lf在数组中\n", val);
} else {
printf("元素%.2lf不在数组中,将其添加到哈希表中\n", val);
insert(val);
}
return 0;
}
```
首先定义了一个结构体Node,用来存储哈希表中的元素。然后定义了一个大小为HASH_SIZE的哈希表数组hashTable,每个元素存储一个指向Node的指针。insert函数将一个元素插入到哈希表中,首先根据元素的值计算出一个key,然后将该元素插入到hashTable[key]对应的链表中。search函数用来查找一个元素是否在哈希表中,同样先计算出key,然后在hashTable[key]对应的链表中查找该元素。main函数中先读入double型数组,并将每个元素插入到哈希表中,然后让用户输入要查找的元素,如果在哈希表中则输出找到,否则将其插入到哈希表中。
阅读全文