1

リンク リストを作成し、次の検索関数を使用してデータ フィールドの位置を取得しましたが、リンク リストの最後の要素として値を返します。理由を推測できません。

int search(struct node *curr,int d,int i)
{
if (!(curr-1))
    return(0);
if (curr->data == d)
    return i;

else
{
    i++;
    search(curr->link,d,i);
}
 }

次のステートメントを使用して、メインから制御しました。

m=search(first,data,i) //ここで、first は最初の要素から最初の要素へのポインタであり、data は検索する要素です

4

2 に答える 2

3
if (!(curr-1))

なぜ-1ですか?

else
{
    i++;
    search(curr->link,d,i);
}

returnあなたはその声明を忘れました。それ以外の場合、戻り値は未定義です。次に、再帰search関数は次のようになります。

int search(struct node *curr, int d, int i)
{
    if (curr == NULL)
        return 0; /* If 1 <= i <= n */
    else if (curr->data == d)
        return i;
    else
        return search(curr->link, d, i + 1); 
}
于 2013-06-14T07:59:42.003 に答える
1

なぜ再帰?あなたは悪い習慣を学びます。

int search(struct node* curr, int d, int i)
{
    if (NULL == curr)
    {
       return 0;
    }
    i = 1;
    while(curr->data != d)
    {
        if (NULL != curr->link)
        {
            curr = curr->link;
            ++i;
        }
        else
        {
            return 0;
        }
    }
    return i;
}
于 2013-06-14T08:08:17.003 に答える