問 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->next は NULL になっているので,
p = p->next; を実行すると p == NULL の状態になる(これが繰り返しの終了を意味する).
【参考】
データ構造とアルゴリズムの講義資料ではノードの型が struct node と書いてあるので,
ポインタ変数の宣言が struct node *p となっていたり,
malloc でのメモリ確保が malloc(sizeof(struct node)) と書いてあったりすると思います.
本課題では struct node を NODE という名前でも使えるように定義してある(typedef でそのように定義)ので「struct node」と「NODE」は全く同じ意味です.
- 【プログラムの実行結果】(その1)※赤字は実行時にキーボードから入力する内容
(この場合は何も入力しません)
10⏎ 20⏎ 30⏎
【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
■ 実行の画面出力の内容が上の例と違う(きちんと確認していない).
■ インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).
← [ 問 6 (ex1306a.c) ]
ミスが無いことを確認したら次の問題へ → [ 問 8 (ex1308a.c) ]