平成26年秋期午後問3プログラミング 問1(3)
広告
太郎さん
(No.1)
https://www.ap-siken.com/kakomon/26_aki/pm03.html
図5のプログラムの2~6行目について
2 a←list
3 b←a->next
4 if(bがNULLと等しくない)
5 b←b->next
6 end if
この部分の動きについて、図3の6→4→3→8→7→2→1→5の例だと
2行目で「aポインタが6の要素を指す」
3行目で「bポインタが4の要素を指す」
5行目で「bポインタが3の要素を指す」
となり6行目終了時点で、「aポインタは6,bポインタは3の要素を指している」という解釈になると思うのですが、間違えているでしょうか?
そうなると7行目以降でaが1つ、bが2つずつ進むと、
while文1回目終了時点 aポインタは4,bポインタは7の要素を指している。
while文3回目終了時点 aポインタは3,bポインタは1の要素を指している。
while文4回目の途中で aポインタは8,bポインタは5の要素(NULL)を指す。
となるのかと思いますが、
これを要素数が7個の場合に適応すると
マージソートの前半:N個、後半N+1となり解答と相違します。
どこの考え方が間違えているかご教授ください。
図5のプログラムの2~6行目について
2 a←list
3 b←a->next
4 if(bがNULLと等しくない)
5 b←b->next
6 end if
この部分の動きについて、図3の6→4→3→8→7→2→1→5の例だと
2行目で「aポインタが6の要素を指す」
3行目で「bポインタが4の要素を指す」
5行目で「bポインタが3の要素を指す」
となり6行目終了時点で、「aポインタは6,bポインタは3の要素を指している」という解釈になると思うのですが、間違えているでしょうか?
そうなると7行目以降でaが1つ、bが2つずつ進むと、
while文1回目終了時点 aポインタは4,bポインタは7の要素を指している。
while文3回目終了時点 aポインタは3,bポインタは1の要素を指している。
while文4回目の途中で aポインタは8,bポインタは5の要素(NULL)を指す。
となるのかと思いますが、
これを要素数が7個の場合に適応すると
マージソートの前半:N個、後半N+1となり解答と相違します。
どこの考え方が間違えているかご教授ください。
2021.09.28 21:26
関数従属さん
★AP シルバーマイスター
(No.2)
>6行目終了時点で、「aポインタは6,bポインタは3の要素を指している」という
>解釈になると思うのですが、間違えているでしょうか?
上記で合っております。
>そうなると7行目以降でaが1つ、bが2つずつ進むと、
>while文1回目終了時点 aポインタは4,bポインタは7の要素を指している。
>while文3回目終了時点 aポインタは3,bポインタは1の要素を指している。
>while文4回目の途中で aポインタは8,bポインタは5の要素(NULL)を指す。
aが1つ、bが2つずつ進む部分は合っております。以下となります。
while文1回目終了時点 aポインタは4,bポインタは7の要素を指している。
while文2回目終了時点 aポインタは3,bポインタは1の要素を指している。
while文3回目終了時点 aポインタは8,bポインタは5の次要素(NULL)を指す。
>これを要素数が7個の場合に適応すると
>マージソートの前半:N個、後半N+1となり解答と相違します。
要素数7個の以下の例の場合だと
6→4→3→8→7→2→1
6行目終了時点で、aポインタは6,bポインタは3の要素を指しており
7行目以降でaが1つ、bが2つずつ進み
while文1回目終了時点 aポインタは4,bポインタは7の要素を指している。
while文2回目終了時点 aポインタは3,bポインタは1の要素を指している。
while文3回目の途中で aポインタは8,bポインタは1の次要素(NULL)を指す。
ようになります。
13行目が p←a->next となっているので、pポインタは7の要素を指します。
このpポインタがdivide関数の戻り値となり後半のリストの先頭になるので
6→4→3→8
7→2→1
となり、前半:N+1個、後半N個となります。
2021.09.29 01:23
太郎さん
(No.3)
ありがとうございます、理解できました!
ポインタが最後の要素を指している状態と最後の要素のnextを指している状態を混同していたようです。
ポインタが最後の要素を指している状態と最後の要素のnextを指している状態を混同していたようです。
2021.09.29 08:25
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。