Hashtable でサイクルを検出します。キーと値のペアのセットが与えられ、これらが Hashtable に格納されているとします。値がキーになることも可能です。このすべてのキーと値のペアが Hashtable に格納され、キーが指定されている場合、キーの適切な値を検出できるはずです。値は、サイクルのエントリ ポイントになります。例:(キーと値のペア)
A->B
B->c
c->D
D->E
E->c
したがって、キー 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 *value = getValue(key, false); // I am using a global hashtable.
これは問題なく動作しますが、50 だけでなく char[] に動的サイズを使用したいと考えています。