C 如何在一组键值对中检测循环,其中一些值可以是键
检测哈希表中的循环。 假设您有一组键值对,这些存储在哈希表中。值也可能是键。如果所有这些键值对都存储在Hashtable中,并且给定一个键,那么我们应该能够为一个键检测到合适的值。值将是循环的入口点。 示例:(键值对) 因此,当询问与键A对应的值时,应该返回C,而D的值应该返回D 我是这样做的,但我认为可以有更好的解决方案:C 如何在一组键值对中检测循环,其中一些值可以是键,c,loops,cycle,circular-reference,keyvaluepair,C,Loops,Cycle,Circular Reference,Keyvaluepair,检测哈希表中的循环。 假设您有一组键值对,这些存储在哈希表中。值也可能是键。如果所有这些键值对都存储在Hashtable中,并且给定一个键,那么我们应该能够为一个键检测到合适的值。值将是循环的入口点。 示例:(键值对) 因此,当询问与键A对应的值时,应该返回C,而D的值应该返回D 我是这样做的,但我认为可以有更好的解决方案: int count = 0; char *keys[50]; getValue(char *key, bool for_cycle){ save_keys_cycle[co
int count = 0;
char *keys[50];
getValue(char *key, bool for_cycle){
save_keys_cycle[count] = key;
if(for_cycle){
int i=0;
for(i = 0; i<count;i++ ){
if(strcmp(key, save_keys_cycle[i])==0){
count = 0;
return key;
}
}
}
count++;
char *value = lookup(hashtable, key);
if(value != null){
char *value = lookup(hashtable, value);
if(value != null){
getValue(value, true);
}
}else{
count = 0;
return value;
}
}
这很好,但我想对char[]使用动态大小,而不仅仅是50。如果我能找到一个更好的方法,这将是值得赞赏的。试试这个:
int count = 0;
char *keys[50];
getValue(char *key, bool for_cycle){
save_keys_cycle[count] = key;
if(for_cycle){
int i=0;
for(i = 0; i<count;i++ ){
if(strcmp(key, save_keys_cycle[i])==0){
count = 0;
return key;
}
}
}
count++;
char *value = lookup(hashtable, key);
if(value != null){
char *value = lookup(hashtable, value);
if(value != null){
getValue(value, true);
}
}else{
count = 0;
return value;
}
}
char *value = getValue(key, false); // I am using a global hashtable.