我有以下代码:
if (strcmp(method, "print") == 0){
for (i = 0; i < hashtable->M; i++){
fprintf(fout,"[%d] :", i);
if (hashtable->v[i] != NULL)
while(hashtable->v[i]){
fprintf(fout," ");
((Pair*)hashtable->v[i]->info)->fp(hashtable->v[i], fout);
hashtable->v[i] = hashtable->v[i]->urm;
}
fprintf(fout,"\n");
}
}
在我的代码中,当我遇到&#34; print&#34;从文件中,我必须打印出我的哈希表中存储的值。 M是哈希表的大小,而v是指向链表的void *。这一切都很好,但如果我必须在哈希表中添加一些值然后打印它们,打印后我将丢失所有以前存储的值。我认为这可能与我这样做的事实有关:hashtable->v[i] = hashtable->v[i]->urm;
但即便如此,我也不知道如何恢复价值。我正在考虑将某些东西作为哈希表的辅助指针,但这对我来说失败了。注意,结构如下
typedef struct celulag {
void *info;
struct celulag *urm;
} TCelulaG, *TLG, **ALG;
typedef unsigned int (*TFHash)(const void*, size_t M, size_t range);
/* structura tabela Hash */
typedef struct {
size_t M;
TFHash fh;
TLG *v;
} TH;
typedef void (*TPrint)(TLG l, FILE *g);
typedef struct {
void *key;
void *value;
TPrint fp;
int frequency;
} Pair;
请注意,这是在一段时间内完成的,因此赋值将如下所示: 添加3个值,打印,添加另外4个值,打印。添加前3个值后,如果我引发,它都是好的,在添加接下来的4个值后,如果我打印,则只显示最后4个值。 有人可以帮忙吗?非常感谢你。