回答編集履歴

4

訂正

2018/01/28 05:35

投稿

nullpon
nullpon

スコア5737

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- リストが残り1つの場合、ソートが完了したとして、ループを抜けます。
21
+ おそらく、リストが残り1つの場合、ソートが完了したとして、ループを抜けます。
22
22
 
23
23
 
24
24
 

3

訂正

2018/01/28 05:35

投稿

nullpon
nullpon

スコア5737

test CHANGED
@@ -48,4 +48,6 @@
48
48
 
49
49
  > if (&((*p)->next) == q || &((*q)->next) == p) {
50
50
 
51
+
52
+
51
53
  尚、この条件ではリストの先頭要素と要素pが隣り合っているかどうかチェックしていますが、ポインタのつなぎ替えの順番を工夫すれば、1つにまとめることも可能です。

2

追記

2018/01/28 03:34

投稿

nullpon
nullpon

スコア5737

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- おそらく、リストが残り1つの場合、ソートが完了したとして、ループを抜けます。
21
+ リストが残り1つの場合、ソートが完了したとして、ループを抜けます。
22
22
 
23
23
 
24
24
 
@@ -37,3 +37,15 @@
37
37
 
38
38
 
39
39
  ループの最後では、先頭の次の要素を新たな先頭にして、処理を繰り返します。
40
+
41
+
42
+
43
+ で、関数exchange(head, p)の中身ですが、以下の処理を行っています。
44
+
45
+ 1. リストheadから要素pを引っこ抜いて、抜けた部分を繋ぎ直す。
46
+
47
+ 2. リストheadの先頭に要素pを追加して、要素pを新しいリストの先頭にする。
48
+
49
+ > if (&((*p)->next) == q || &((*q)->next) == p) {
50
+
51
+ 尚、この条件ではリストの先頭要素と要素pが隣り合っているかどうかチェックしていますが、ポインタのつなぎ替えの順番を工夫すれば、1つにまとめることも可能です。

1

追記

2018/01/28 03:32

投稿

nullpon
nullpon

スコア5737

test CHANGED
@@ -8,4 +8,32 @@
8
8
 
9
9
 
10
10
 
11
- 関数listmin(head)は、リストの全ての要素をチェックして、いちばん小さいnameを持つ要素を返していると思われます。そうでないと正しくソートされません。
11
+ 関数listmin(head)は、名前からリストの全ての要素をチェックして、いちばん小さいnameを持つ要素を返していると思われます。そうでないと正しくソートされません。
12
+
13
+
14
+
15
+ > if (p == 0)
16
+
17
+ > break;
18
+
19
+
20
+
21
+ おそらく、リストが残り1つの場合、ソートが完了したとして、ループを抜けます。
22
+
23
+
24
+
25
+ > exchange(head, p);
26
+
27
+ > //大小を入れ替える
28
+
29
+
30
+
31
+ ここでは、見つけたいちばん小さい要素を関数exchange(head, p)で先頭に移動しています。
32
+
33
+
34
+
35
+ > head = &((*head)->next);
36
+
37
+
38
+
39
+ ループの最後では、先頭の次の要素を新たな先頭にして、処理を繰り返します。