Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在一组键值对中检测循环,其中一些值可以是键_C_Loops_Cycle_Circular Reference_Keyvaluepair - Fatal编程技术网

C 如何在一组键值对中检测循环,其中一些值可以是键

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

检测哈希表中的循环。 假设您有一组键值对,这些存储在哈希表中。值也可能是键。如果所有这些键值对都存储在Hashtable中,并且给定一个键,那么我们应该能够为一个键检测到合适的值。值将是循环的入口点。 示例:(键值对)

因此,当询问与键A对应的值时,应该返回C,而D的值应该返回D

我是这样做的,但我认为可以有更好的解决方案:

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.