2

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[] に動的サイズを使用したいと考えています。

4

0 に答える 0