2016-09-20 6 views
-1

からリンクされたリストを検索:私は次のような問題の理解に必要なファイル

リンクリストflagin_fileは、そのリストのノードを意味

typedef enum 
{ 
    in_file, 
    in_memory 
}flag; 

列挙です

typedef struct 
{ 
    int i; 
    void * next; 
    flag fg; 
}node; 

考えますがファイルにあり、in_memoryはリストノードがファイルに存在しないことを示します(nextは名前である文字列を指していますファイルの)。

与えられた関数node* loadList(char* file_name)は、ファイルからリストを読み取り、最初のリストノードを返します。

valueがリストに存在するかどうかをチェックし、値が見つかるファイル名のポインタを戻す関数char* exists(node* list,int value,int* isInList)を作成します。

ファイルには複数のリストが含まれています。 ファイルからリストを読み取っているときに、ポインタnextを書き換え、既存のリストからflagと入力します。

質問:ポインタnextを書き直して、flagをリストから削除するにはどうすればよいですか?

列挙型flagをファイルの検索に使用する方法はありますか。

答えて

1

(編集注:[OK]を、編集した質問で、これはより多くのコメントのようなもので、実際の質問に答えるが、私はとにかくそれをここに残しておきますない...)

あなたはおそらく組合を使用する必要があります代わりにボイドポインタの:

struct list_node 
{ 
    int i; 
    union { 
     struct list_node *node; 
     const char *filename; 
    } next; 
    flag fg; 
} ; 

次に、あなたは

switch(node->fg) 
case in_memory: 
    ....node->next.node->.....; 
    break; 
case in_file: 
    ....node->next.filename....; 
    break; 
} 
のようなコードを持っているでしょう
関連する問題