ページ 11

線形探索

Posted: 2011年7月19日(火) 12:31
by yuuma
こんにちは。
学校の課題について質問させていただきます。
プログラムをつくる過程で整数値データが格納された連結リストにおいて、目的の値を線形探索する関数を作ってるのですが、for文の()内がわからなくて困ってます。
配列とかと違って構造体に添字がないのでよくわからないです。
ご教授お願いします。

コード:

typedef struct  LinkedListNode{
   
  int data;
  struct LinkedListNode *next;
} LinkedListNode;

typedef struct LinkedList{
  
  int node_num;
  struct LinkedListNode *head;
} LinkedList;

LinkedList *LinkedListSearch(LinkedList *list, int x)
{
      
   LinkedListNode *pNode;
     for()
     {
       if(pNode->data == x )
       return pNode;
     }

     return (NULL);
}
ちなみにこの関数の引数は連結リストへのポインタ、探す値で存在すればその値があるノードのポインタを返して、なければNULLを返すものとしてます。
あの構造体LinkedListNodeのメンバはデータ値と次のノードへのポインタ、LinkedListはノード総数と先頭ノードへのポインタです。

Re: 線形探索

Posted: 2011年7月19日(火) 14:07
by さかまき
ノード総数がわかっているので、先頭ノードからノード総数分ポインタを進めて探していけばよいです。

他の掲示板でも他の人が同じ問題を相談されていますが
やはり同じ所(LinkedListSearch内のforループの所)で
困っておられました。
そっちでは、データを追加するLinkedListDataAddなどのややこしい処理は
出来ているんですが、LinkedListSearchはおわかりにならなかった様です。
LinkedListDataAddに比べてLinkedListSearchってそんなに難しいんですかね?

ちなみにそちらについた解答例ではノード総数は使わない方法で解決しています。

Re: 線形探索

Posted: 2011年7月19日(火) 14:10
by non
for(pNode=list->head;pNode!=NULL;pNode=pNode->next)

こんな感じで、ノードを進めていき、検索します。

Re: 線形探索

Posted: 2011年7月19日(火) 17:47
by yuuma
ありがとうございます。
解決しました。