dポイントプレゼントキャンペーン実施中!

連結リストについて
アルゴリズムの本を買って勉強しているのですが、わからない箇所がありまして。

構造体宣言で
(1)struct CELL {
struct CELL *next;
int val;
};

(2)struct CELL {
struct CELL *next;
int val;
}*header;


順番をたどって行く書き方で
struct CELL *p;

for (p=header; p!=NULL; p=p->next)
printf("%d\n", p->value);

なぜこれでp->valueの値が変動していくのですか?
それと上記の(1)の書き方でこのforを回すとき、headerはどのように定義すればよいのですか?
よろしくお願いします。

A 回答 (2件)

struct CELLの変数を定義する必要があります。



struct CELL mika;
struct CELL shouta;
struct CELL kazu;

で連結リストを作るとこうなります。

mika.value = 123;
mika.next = &shouta;

shouta.value = 456;
shouta.next = &kazu;

kazu.value = 789;
kazu.next = NULL;

連結リストの最後の要素は「nextをNULLにする」必要があります。(for文の終了条件)

>なぜこれでp->valueの値が変動していくのですか?

forの最後(p=p->next)で代入しているので、p自身が変わっていきます。
pが変わるのでp->valueも変わっていきます。

>それと上記の(1)の書き方でこのforを回すとき、
>headerはどのように定義すればよいのですか?

「headerが先頭の要素を指す」ようにして下さい。
上の例ならmikaが先頭なのでheader = &mika; です。

※図でもうまく伝わらないかもしれませんが、ないよりかはマシなので添付します。
「連結リストについて」の回答画像2
    • good
    • 0
この回答へのお礼

ありがとうございます。
理解できてすっきりしました。
もうちょっと構造体とポインタを勉強してから、アルゴリズムの本を読んだほうがいいかもしれないですね。

お礼日時:2010/08/25 23:21

>なぜこれでp->valueの値が変動していくのですか?



p = p->next
という式で、連結リストを順繰りにたどっているからです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!