-1-
リストⅢ
0.目次
3.応用
3.1 マージソート
3.2 グラフ表現
3.3 問題
問題1:素数生成
問題2:素数生成(高速化)
問題3:双方向リストの作成
リストⅢ
-2-
3.応用
3.1 マージソート
考え方●
(手順1)n個のデータを読み込み、要素数1のn個のリストを作成する。
(手順2)隣接する2つのリストを併合し、1つの昇順リストを作成する。
(手順3)リスト数が1つになるまで (手順2)を繰り返す。、
(1.1)
head[1] 55 NULL
head[2] 33 NULL
head[3] 66 NULL
head[4] 11 NULL
head[5] 77 NULL
head[6] 22 NULL
head[7] 44 NULL
(1.2)
head[1] 55 NULL
head[2] 33
head[3] 66 NULL
head[4] 11 NULL
head[5] 77 NULL
head[6] 22 NULL
head[7] 44 NULL
リストⅢ
-3-
リストⅢ
(1.3)
head[1] 55 NULL
head[2] 33
head[3] 66 NULL
head[4] 11
head[5] 77 NULL
head[6] 22 NULL
head[7] 44 NULL
(1.4)
head[1] 55 NULL
head[2] 33
head[3] 66 NULL
head[4] 11
head[5] 77 NULL
head[6] 22
head[7] 44 NULL
(1.5)
head[1] 55 NULL
head[2] 33
head[3] 66 NULL
head[4] 11
head[5] 77 NULL
head[6] 22
head[7] 44 NULL
-4-
リストⅢ
(2.1)
head[1] 33 55 NULL
head[2] 11 66 NULL
head[3] 22 77 NULL
head[4] 44 NULL
head[5]
head[6]
head[7]
(2.2)
head[1] 33 55
head[2] 11 66 NULL
head[3] 22 77 NULL
head[4] 44 NULL
head[5]
head[6]
head[7]
(2.3)
head[1] 33 55
head[2] 11 66 NULL
head[3] 22 77 NULL
head[4] 44
head[5]
head[6]
head[7]
-5-
リストⅢ
(3.1)
NULLhead[1] 11 33 55 66
NULLhead[2] 22 44 77
head[3]
head[4]
head[5]
head[6]
head[7]
(3.2)
head[1] 11 33 55 66
NULLhead[2] 22 44 77
head[3]
head[4]
head[5]
head[6]
head[7]
プログラム●
1 /* << f311.c >> */
/* マージソート */2
3 #include <stdio.h>
4 #include <stdlib.h>
5 struct NODE {
6 int info;
7 struct NODE *next;
8};
9 main() {
10 int data,i,j,n;
11 struct NODE *head[999],*p,*p1,*p2,*q,*temp;
/* 初期リストの作成。要素数1のリストを配列として作成する。*/12
/* 配列の要素数。*/13 n=0;
14 while(1){
15 scanf("%d",&data); if( data <= 0 ) { break; }
16 n++;
17 head[n] = (struct NODE *)malloc(sizeof(struct NODE));
18 p = (struct NODE *)malloc(sizeof(struct NODE));
19 p->info = data; p->next = NULL;
20 head[n]->next = p;
21 }
评论0