演示将键5、28、19、15、20、33、12、17、10插入到哈希表中,并通过链接解决冲突。让表有9个插槽,并让哈希函数为h (k)= h mod 9
时间: 2023-06-02 14:06:43 浏览: 37
好的,我可以回答这个问题。根据给定的哈希函数h(k)=h mod 9,我们可以先将键值按照该函数计算出其哈希值,然后将其插入到哈希表的相应插槽中。如果发生冲突,可以使用链接的方式解决。具体操作如下:
1. 将键5的哈希值计算为5,插入到哈希表的第5个插槽中。
2. 将键28的哈希值计算为1,插入到哈希表的第1个插槽中。
3. 将键19的哈希值计算为1,发现第1个插槽已经被占用,于是将其链接到已经在该插槽中的键28的后面。
4. 将键15的哈希值计算为6,插入到哈希表的第6个插槽中。
5. 将键20的哈希值计算为2,插入到哈希表的第2个插槽中。
6. 将键33的哈希值计算为6,发现第6个插槽已经被占用,于是将其链接到已经在该插槽中的键15的后面。
7. 将键12的哈希值计算为3,插入到哈希表的第3个插槽中。
8. 将键17的哈希值计算为8,插入到哈希表的第8个插槽中。
9. 将键10的哈希值计算为1,发现第1个插槽已经被占用,且该插槽中已经存在键28和19,于是将其链接到键19的后面。
最终得到的哈希表如下:
0:
1:28 -> 19 -> 10
2:20
3:12
4:
5:5
6:15 -> 33
7:
8:17
希望能帮到你!
相关问题
写一个c语言程序的通讯录,尝试将所有人员及其号码插入到哈希表结构中
可以的,这个问题可以回答。以下是一个简单的C语言程序示例,用于创建一个通讯录哈希表,并将人员及其号码插入其中:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TABLE_SIZE 100
typedef struct _entry {
char* name;
char* phone;
struct _entry* next;
} Entry;
Entry* hash_table[TABLE_SIZE];
unsigned int hash(char* str) {
unsigned int hashval = 0;
for (; *str != '\0'; str++) {
hashval = *str + (hashval << 5) - hashval;
}
return hashval % TABLE_SIZE;
}
void insert(char* name, char* phone) {
unsigned int hashval = hash(name);
Entry* new_entry = (Entry*)malloc(sizeof(Entry));
new_entry->name = strdup(name);
new_entry->phone = strdup(phone);
new_entry->next = hash_table[hashval];
hash_table[hashval] = new_entry;
}
char* lookup(char* name) {
unsigned int hashval = hash(name);
Entry* entry = hash_table[hashval];
while (entry != NULL) {
if (strcmp(entry->name, name) == 0) {
return entry->phone;
}
entry = entry->next;
}
return NULL;
}
int main() {
insert("Alice", "123456");
insert("Bob", "234567");
insert("Charlie", "345678");
printf("Alice's phone: %s\n", lookup("Alice"));
printf("Bob's phone: %s\n", lookup("Bob"));
printf("Charlie's phone: %s\n", lookup("Charlie"));
return 0;
}
```
这个程序使用哈希表来存储通讯录信息,其中每个条目包含一个人员的姓名和电话号码。哈希函数使用了简单的字符串哈希算法,将字符串转换为一个整数索引,然后将条目插入到哈希表中。查找函数使用相同的哈希函数来查找特定的人员,并返回其电话号码。
线性探测法解决插入记录到哈希表的流程图
好的,下面是线性探测法解决插入记录到哈希表的流程图:
1. 首先,将要插入的记录的关键字通过哈希函数计算出对应的哈希地址。
2. 如果哈希地址已经被占用,那么就按照线性探测法的规则,往后依次检查每个地址,直到找到一个空闲的地址为止。
3. 如果找到了空闲的地址,就将记录插入到该地址中。
4. 如果哈希表已经被占满,就需要进行扩容操作,重新计算哈希地址,并将记录插入到新的哈希表中。
5. 最后,返回插入成功的结果。
下面是一张示意图,可以更直观地展示线性探测法解决插入记录到哈希表的流程:
![线性探测法解决插入记录到哈希表的流程图](https://img-blog.csdn.net/20180413112506800)