課題 [13] 構造体(7/8)

問 7(提出プログラム名:ex1307a.c)

まず,このプログラム(ex1307a.c)をダウンロードしなさい.
そして,ex1307a.cを編集して次の処理を行うプログラムとして仕上げなさい.

【目的の処理】
このプログラムは「データ構造とアルゴリズム」の講義で説明されているリスト構造(線形リスト)について,そのリストに格納されているデータ(整数)を先頭から順に出力させるものである.
main 関数内では 3 つのノードを malloc 関数によって作成し,順番に 10, 20, 30 というデータを格納している(下図の状態):


プログラム中の関数 print_list を完成させ,このリストの内容を先頭から順に出力させなさい.

【ヒント】
あるポインタ変数 p が,あるノードを指している場合,
 ● そのノードのデータは p->data でアクセスできる.
 ● その次のノードのポインタは p->next に格納してあるので,
  p = p->next; を実行すると 1 つ後ろのノードを p が指すようになる.
 ● リストの末尾のノードの場合,p->nextNULL になっているので,
  p = p->next; を実行すると p == NULL の状態になる(これが繰り返しの終了を意味する).

【参考】
データ構造とアルゴリズムの講義資料ではノードの型が struct node と書いてあるので,
ポインタ変数の宣言が struct node *p となっていたり,
malloc でのメモリ確保が malloc(sizeof(struct node)) と書いてあったりすると思います.
本課題では struct nodeNODE という名前でも使えるように定義してある(typedef でそのように定義)ので「struct node」と「NODE」は全く同じ意味です.

  • 【プログラムの実行結果】(その1)赤字は実行時にキーボードから入力する内容
    (この場合は何も入力しません)
10
20
30

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
実行の画面出力の内容が上の例と違うきちんと確認していない).
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


ミスが無いことを確認したら次の問題へ → [ 問 8 (ex1308a.c) ]