我目前正在尝试创建字符串的哈希表。但是,在我的搜索功能中,我遇到了一个错误:再次请求成员_而不是结构或联合体..
/*search hash table*/
ListC search(hash_ref h, char* key){
ListC* tempList;
int hashvalue= hashing(h, key);
46 for(tempList= h->List[hashvalue]; tempList!=NULL; tempList=tempList->next){
47 if(strcmp(tempList->key,key)==0){
return tempList;
}
}
return NULL;
}
/*hash function*/
int hashing(hash_ref h, char* key){
int hashvalue=0;
for(hashvalue=0;key!='\0';key++){
hashvalue= *key + (hashvalue*5) - hashvalue;
}
return hashvalue%h->size;
}
/*HashTable struct*/
typedef struct HashTable{
int size;
ListC **List;
}hash;
typedef struct Node{
long key;/*book id*/
long count;
struct Node* next;
struct Node* prev;
}NodeType;
typedef NodeType* NodeRef;
typedef struct ListCount{
NodeRef first;
NodeRef last;
NodeRef current;
long length;
}ListCount;
ListC在我的头文件中定义为
typedef struct ListCount* ListC;
在第46和47行,我收到一条错误消息,说key和next是不是结构的成员。我不确定这是什么问题
最佳答案
typedef struct ListCount* ListC;
因此
ListC
是指针类型。ListC* tempList;
tempList
是指向ListCount
的指针。... tempList=tempList->next ...
tempList
不指向具有名为next
的成员的结构。我建议,这说明了为什么为指针类型定义
typedef
通常不是一个好主意。无论如何,您都必须跟踪间接级别。如果所有指针类型都是显式的,这样做通常会更容易。