【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.22488

自己参照構造体でのポインタ指定
投稿者---あきき(2005/08/07 00:05:19)


自己参照構造体を今、当サイトの15−5で学習しています。しかし、例題を眺めているうちに、構造体データを登録し終えた時、
[head]は最終データを指すアドレスのように感じざるを得ません。最終データの[p->next]はNULLではないのでしょうか。そして、登録したデータ順に表示されないのでしょう。free関数への引数ポインタの位置は先頭からでなくてもいいのでしょうか。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:自己参照構造体でのポインタ指定 22489 まきじ 2005/08/07 00:36:29


No.22489

Re:自己参照構造体でのポインタ指定
投稿者---まきじ(2005/08/07 00:36:29)


>[head]は最終データを指すアドレスのように感じざるを得ません。

データは最後に入力されたデータですが、head はリストの先頭を
指しています。

>最終データの[p->next]はNULLではないのでしょうか。

そうです。NULL になっています。

>free関数への引数ポインタの位置は先頭からでなくてもいいのでしょうか。

リストの先頭からになってますよ。
線形リストだから、先頭からでないと free() できないです。
リストの末尾からだと、少し面倒かもしれません。


この投稿にコメントする

削除パスワード

No.22491

Re:自己参照構造体でのポインタ指定
投稿者---あきき(2005/08/07 01:27:11)


>>[head]は最終データを指すアドレスのように感じざるを得ません。
>
>データは最後に入力されたデータですが、head はリストの先頭を
>指しています。
>
[head]についてですが、malloc関数で確保された領域に1件ずつ登録されるものと思っていました。ですから、malloc関数からの戻り値[p]も[p->next]と共に更新され、最終的には、[head]は最後にmalloc関数が確保した領域のアドレスと理解してたのですが、どうやら怪しいみたいです。[head]とmalloc関数で確保された領域の関係はどの様になっているのでしょうか。


この投稿にコメントする

削除パスワード

No.22492

Re:自己参照構造体でのポインタ指定
投稿者---まきじ(2005/08/07 01:51:34)


>[head]についてですが、malloc関数で確保された領域に1件ずつ登録されるものと思っていました。

1 件のデータに対して、1 ノード必要ですから、
struct list 型のサイズ分 malloc() で領域を確保します。
確保した領域のポインタを、p に格納してます。

>最終的には、[head]は最後にmalloc関数が確保した領域のアドレスと理解してたのですが

そうです。
最後に malloc() で確保した領域が head になってます。

>[head]とmalloc関数で確保された領域の関係はどの様になっているのでしょうか。

malloc() で確保された領域は、入力されたデータを格納。
head は、最後に入力されたデータのノードのポインタを格納。


前に繋げてるので、データは入力順とは逆に表示される。


この投稿にコメントする

削除パスワード

No.22495

Re:自己参照構造体でのポインタ指定
投稿者---あきき(2005/08/07 09:20:56)


>malloc() で確保された領域は、入力されたデータを格納。
>head は、最後に入力されたデータのノードのポインタを格納。

>
>前に繋げてるので、データは入力順とは逆に表示される。

すみませんが、もう少し詳しく訓えて頂けないでしょうか?
”前に繋げてる”とはどう意味なんでしょうか?
このあたりからデータの並び方が分からなくなってきました。あたかも、最終件数から登録しているかのように思えてなりません。



この投稿にコメントする

削除パスワード

No.22496

Re:自己参照構造体でのポインタ指定
投稿者---あきき(2005/08/07 10:13:32)


このあたりからデータの並び方が分からなくなってきました。あたかも、最終件数から登録しているかのように思えてなりません。

上記の文章が分かりずらかったと思いますので訂正します。
最終データとは、最初に登録したデータの事なんでしょうか?それとも最後に登録したデータの事なんでしょうか?


この投稿にコメントする

削除パスワード

No.22498

Re:自己参照構造体でのポインタ指定
投稿者---まきじ(2005/08/07 12:39:38)


>最終データとは、最初に登録したデータの事なんでしょうか?
>それとも最後に登録したデータの事なんでしょうか?

リスト最後のデータは、最初に入力されたデータです。
リスト先頭のデータは、最後に入力されたデータです。

別の言い方をすると、

最初に入力されたデータは、リストの最後にあります。
最後に入力されたデータは、リストの最初にあります。

リストの最初は、head が指してる位置です。

リストの最初と最後と入力されたデータの最初と最後を区別してください。
最初に入力されたものが、リストの最初にあると思い込んでませんか?

# 実行してみましたか?
# 入力順と逆に表示されたはずです。というか、される。


この投稿にコメントする

削除パスワード

No.22505

ありがとうございます
投稿者---あきき(2005/08/07 23:02:51)


>リスト最後のデータは、最初に入力されたデータです。
>リスト先頭のデータは、最後に入力されたデータです。
>
>別の言い方をすると、
>
>最初に入力されたデータは、リストの最後にあります。
>最後に入力されたデータは、リストの最初にあります。
>
>リストの最初は、head が指してる位置です。
>
>リストの最初と最後と入力されたデータの最初と最後を区別してください。
>最初に入力されたものが、リストの最初にあると思い込んでませんか?
>
はい、その通りです。ですから、表示された内容が逆なのに驚きました。
だから、登録時の処理手順に疑問を持ったのです。
リスト構造データの先頭アドレス[head]をfree関数の引数として渡せます。[p->next]で次データにチェーンしているから、リスト構造と、そのアルゴリズムがわかれば後は理解できます。

 まきじ様へ

混乱の中、お答えて頂きありがとうございます。おかげさまで、何かしら胸のつっかりが取れた気分です。重ね重ねありがとうございます。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧