gpt4 book ai didi

c++ - 哈希表(封闭寻址)。如何初始化和打印?

转载 作者:行者123 更新时间:2023-11-28 05:55:42 25 4
gpt4 key购买 nike

我应该如何处理封闭寻址的哈希表?

数据结构:

typedef char ktype[9];
typedef void *Infoc;

typedef struct entryc{
ktype ckey;
Infoc infoc;
struct entryc *next;
} Entryc;

typedef Entryc *Chashtable[HASHSIZE];

我正在声明一个结构数组的指针,已初始化:

void initChain(Chashtable *h){
int i;
for(i=0; i<HASHSIZE; i++){
*h[i] = NULL;
}
}

这是插入代码:

void insertChain(Chashtable *h, ktype k, Infoc inf){
int n= hash(k, 0);
char hkey[3];
sprintf(hkey, "%d", n);
struct entryc *new = malloc (sizeof(struct entryc));
strcpy(new->ckey, hkey);
new->infoc = inf;
new->next = *h[n];
*h[n] = new;
}

我想打印出哈希表:

void printChain(Chashtable *h){
int i;
for(i=0; i<HASHSIZE; i++){
if((*h[i])){
printf("-> %s\n", (*h[i])->ckey);
}
}
}

打印时出现段错误,为什么?

谢谢。

编辑:

带有段错误的完整代码(在调试器中未发现其他错误):

**

Full compilable code here:

** http://pastebin.com/GHpfqmP3

最佳答案

对于函数参数和实现,你的指针都是错误的。 Chashtable 是一个 struct 指针数组。我在所有地方都删除了一层间接寻址,代码现在运行了,也许不是你想要的!顺便说一句,我必须在 hash() 函数中打补丁。我希望你能从这里开始。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define HASHSIZE 31
#define EMPTY " "
#define DELETED "-"

typedef char ktype[9];
typedef void *Infoc;

typedef struct entryc{
ktype ckey;
Infoc infoc;
struct entryc *next;
} Entryc;

typedef Entryc *Chashtable[HASHSIZE];

int hash(ktype k, int z) {
return rand() % HASHSIZE;
}

void initChain(Chashtable h){
int i;
for(i=0; i<HASHSIZE; i++){
h[i] = NULL;
}
}

void printChain(Chashtable h){
int i;
for(i=0; i<HASHSIZE; i++){
if((h[i])){
printf("-> %s\n", (h[i])->ckey);
}
}
}

void insertChain(Chashtable h, ktype k, Infoc inf){
int n= hash(k, 0);
char hkey[3];
sprintf(hkey, "%d", n);
struct entryc *new = malloc (sizeof(struct entryc));
strcpy(new->ckey, hkey);
new->infoc = inf;
new->next = h[n];
h[n] = new;
}

int main(void) {
// system ("tput clear");

Chashtable j;
initChain(j);
printChain(j);
insertChain(j, "myname", "single");
printChain(j);
return 0;
}

关于c++ - 哈希表(封闭寻址)。如何初始化和打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34188281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com