回答編集履歴
4
訂正
test
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
|
19
19
|
|
20
20
|
|
21
|
-
リストが残り1つの場合、ソートが完了したとして、ループを抜けます。
|
21
|
+
おそらく、リストが残り1つの場合、ソートが完了したとして、ループを抜けます。
|
22
22
|
|
23
23
|
|
24
24
|
|
3
訂正
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
追記
test
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
|
19
19
|
|
20
20
|
|
21
|
-
|
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
追記
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
|
+
ループの最後では、先頭の次の要素を新たな先頭にして、処理を繰り返します。
|