C中哈希插入键值 传入的哈希表为何必须是双重指针类型?
我自己试过传入
set 的内部实现是双向链表
那我插入操作是无需修改整个外部结构的地址一个个上链即可
但在 传参一致性没问题的如下情况下 我传递结构体指针为何没有进行实际的插入
void insertSet(mySet *set,int mykey)
insertSet(set2,nums2[i])
如上 我发现根本没有插入,有没大手子 能指点一下
typedef struct MY_SET
{
int key;//key值
//type char [100];自定义类型可以不存在 只关心KEY KEY不可以重复
UT_hash_handle hh;
}mySet;
mySet *find(mySet *set,int mykey)//传入指向SET的指针 以及键值、
{
mySet *tmp;
HASH_FIND_INT(set,&mykey,tmp);
return tmp;
}
void insertSet(mySet **set,int mykey)
{
mySet *judge =find(*set,mykey);
if(judge == NULL)
{
judge = (mySet *)malloc(sizeof(mySet) );
judge->key = mykey;
HASH_ADD_INT(*set,key,judge);
}
}
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
//1放入哈希 转为哈希
//2遍历查询哈希表是否出现 若出现放入res
int* res ;
int i,cnt1,cnt2,cnt;
mySet *set1 =NULL;
mySet *set2 =NULL;
mySet *s ,*tmp;
mySet *p;
*returnSize=0;
for(i=0;i<nums1Size;i++)
insertSet(&set1,nums1[i]);
cnt1 =HASH_COUNT(set1);
for(i=0;i<nums2Size;i++)
insertSet(&set2,nums2[i]);
cnt2 =HASH_COUNT(set2);
res = malloc(sizeof(int) * (cnt1+cnt2));
if(cnt1>cnt2)
{
HASH_ITER(hh,set2,s,tmp)
{
if(find(set1,s->key))
res[(*returnSize)++] = s->key;
}
}
else
{
HASH_ITER(hh,set1,s,tmp)
{
if(find(set2,s->key))
res[(*returnSize)++] = s->key;
}
}
return res;
}