補足資料
11-3「線形リストのオペレータ」
横浜国立大学 理工学部 数物・電子情報系学科 富井尚志
p key
next
key
next NULL
key next
21 22 23
リストのオペレータ
1.生成
2.
表示(走査)
3.
挿入
4.削除
p key
next
key
next NULL
key next
21 22 23
1.
生成
2.
表示(走査)
3.
挿入
4.削除
void print_list(struct list *p) {
while (p != NULL) {
printf("<%d> ", p->key);
p = p->next;
}
printf("\n");
}
p
key next
key
next NULL
key next
21 22 23
void print_list(struct list *p) {
while (p != NULL) {
printf("<%d> ", p->key);
p = p->next;
}
printf("\n");
}
画面出力
p
key next
key
next NULL
key next
21 22 23
while (p != NULL) {
printf("<%d> ", p->key);
p = p->next;
}
printf("\n");
!=NULL }
画面出力
p
key next
key
next NULL
key next
21 22 23
void print_list(struct list *p) {
while (p != NULL) {
printf("<%d> ", p->key);
p = p->next;
}
printf("\n");
}
<21>
画面出力
p
key next
key
next NULL
key next
21 22 23
while (p != NULL) {
printf("<%d> ", p->key);
p = p->next;
}
printf("\n");
}
<21>
画面出力
p
key next
key
next NULL
key next
21 22 23
void print_list(struct list *p) {
while (p != NULL) {
printf("<%d> ", p->key);
p = p->next;
}
printf("\n");
}
<21>
画面出力
!=NULL
p
key next
key
next NULL
key next
21 22 23
while (p != NULL) {
printf("<%d> ", p->key);
p = p->next;
}
printf("\n");
}
<21> <22>
画面出力
p
key next
key
next NULL
key next
21 22 23
void print_list(struct list *p) {
while (p != NULL) {
printf("<%d> ", p->key);
p = p->next;
}
printf("\n");
}
<21> <22>
画面出力
p
key next
key
next NULL
key next
21 22 23
while (p != NULL) {
printf("<%d> ", p->key);
p = p->next;
}
printf("\n");
}
<21> <22>
画面出力
!=NULL
p
key next
key
next NULL
key next
21 22 23
void print_list(struct list *p) {
while (p != NULL) {
printf("<%d> ", p->key);
p = p->next;
}
printf("\n");
}
<21> <22> <23>
画面出力
NULL p
key next
key
next NULL
key next
21 22 23
while (p != NULL) {
printf("<%d> ", p->key);
p = p->next;
}
printf("\n");
}
<21> <22> <23>
画面出力
NULL p
key next
key
next NULL
key next
21 22 23
void print_list(struct list *p) {
while (p != NULL) {
printf("<%d> ", p->key);
p = p->next;
}
printf("\n");
}
<21> <22> <23>
画面出力
==NULL
NULL p
key next
key
next NULL
key next
21 22 23
while (p != NULL) {
printf("<%d> ", p->key);
p = p->next;
}
printf("\n");
}
<21> <22> <23>
画面出力
NULL p
key next
key
next NULL
key next
21 22 23
void print_list(struct list *p) {
while (p != NULL) {
printf("<%d> ", p->key);
p = p->next;
}
printf("\n");
}
<21> <22> <23>
画面出力
走査( scan )とは、一つ一つの要素のキーを見ていくこと。
「探索」( search )の際にも使う。
p key
next
key
next NULL
key next
21 22 23
1.
生成
2.
表示(走査)
3.
挿入
4.削除
void insert_after(struct list *x, struct list *p) { x->next = p->next;
p->next = x;
}
p key
next
key
next NULL
key next
21 22 23
void insert_after(struct list *x, struct list *p) {
x->next = p->next;
p->next = x;
}
x key
next
30
ここに挿入する
p key
next
key
next NULL
key next
21 22 23
x->next = p->next;
p->next = x;
}
x key
next
30 この値をコピ
ー
p key
next
key
next NULL
key next
21 22 23
void insert_after(struct list *x, struct list *p) {
x->next = p->next;
p->next = x;
}
x key
next
30 この値をコピ
ー
p key
next
key
next NULL
key next
21 22 23
x->next = p->next;
p->next = x;
}
x key
next
30
福沢さんの番号
p
樋口さんの番号 野口さんの番号 NULL
福沢 樋口 野口
イメージ: 電話連絡網 この連絡網では、
「各人は、次に連絡を回す相手の電話番号だけ知っている。」
「連絡網が切れないように、途中にメンバーを挿入する。」
夏目さんの番号
x 夏目
ここに挿入する
福沢さんの番号
p
樋口さんの番号 野口さんの番号 NULL
福沢 樋口 野口
イメージ: 電話連絡網 この連絡網では、
「各人は、次に連絡を回す相手の電話番号だけ知っている。」
「連絡網が切れないように、途中にメンバーを挿入する。」
夏目さんの番号
x
樋口さんの番号
夏目
x->next = p->next;
p->next = x;
}
この値をコピ ー
福沢さんの番号
p
夏目さんの番号 野口さんの番号 NULL
福沢 樋口 野口
イメージ: 電話連絡網 この連絡網では、
「各人は、次に連絡を回す相手の電話番号だけ知っている。」
「連絡網が切れないように、途中にメンバーを挿入する。」
夏目さんの番号
x
樋口さんの番号
夏目
void insert_after(struct list *x, struct list *p) {
x->next = p->next;
p->next = x;
}
この値をコピ ー
福沢さんの番号
p
夏目さんの番号 野口さんの番号 NULL
福沢 樋口 野口
イメージ: 電話連絡網 この連絡網では、
「各人は、次に連絡を回す相手の電話番号だけ知っている。」
「連絡網が切れないように、途中にメンバーを挿入する。」
夏目さんの番号
x
樋口さんの番号
夏目
x->next = p->next;
p->next = x;
}
福沢さんの番号
p
夏目さんの番号 野口さんの番号 NULL
福沢 樋口 野口
イメージ: 電話連絡網 この連絡網では、
「各人は、次に連絡を回す相手の電話番号だけ知っている。」
「連絡網が切れないように、途中にメンバーを挿入する。」
樋口さんの番号
夏目
void insert_after(struct list *x, struct list *p) {
x->next = p->next;
p->next = x;
}
番号の写し順に注意!
福沢さんの番号
p
樋口さんの番号 野口さんの番号 NULL
福沢 樋口 野口
この連絡網では、
「各人は、次に連絡を回す相手の電話番号だけ知っている。」
「連絡網が切れないように、途中にメンバーを挿入する。」
夏目さんの番号
x 夏目
ここに挿入する
番号の写し順に注意!
先に、福沢さんの覚えている樋口さんの電話番号を、
メモをとらずに(憶えておかずに)夏目さんの電話番号に書き換えてしまうと。。。
福沢さんの番号
p
夏目さんの番号 野口さんの番号 NULL
福沢 樋口 野口
イメージ: 電話連絡網 この連絡網では、
「各人は、次に連絡を回す相手の電話番号だけ知っている。」
「連絡網が切れないように、途中にメンバーを挿入する。」
夏目さんの番号
x 夏目
番号の写し順に注意!
先に、福沢さんの覚えている樋口さんの電話番号を、
メモをとらずに(憶えておかずに)夏目さんの電話番号に書き換えてしまうと。。。
福沢さんの番号
p
夏目さんの番号 野口さんの番号 NULL
福沢 樋口 野口
イメージ: 電話連絡網 この連絡網では、
「各人は、次に連絡を回す相手の電話番号だけ知っている。」
「連絡網が切れないように、途中にメンバーを挿入する。」
夏目さんの番号
x 夏目
番号の写し順に注意! ?
先に、福沢さんの覚えている樋口さんの電話番号を、
メモをとらずに(憶えておかずに)夏目さんの電話番号に書き換えてしまうと。。。
樋口さんの電話番号がわからなくなる! ので、連絡網が切れてしまう。
x->next = p->next;
p->next = x;
}
p key
next
key
next NULL
key next
21 22 23
リストのオペレータ
1.生成
2.
表示(走査)
3.
挿入
4.削除
void delete_next(struct list *p) {
struct list *q;
q = p->next;
p->next = q->next;
free(q);
}
削除がないと、領域を解放しないので、増加しっぱなし。
p key
next
key
next NULL
key next
21 22 23
struct list *q;
q = p->next;
p->next = q->next;
free(q);
}
この要素を削除(領域解放)する q
p key
next
key next
NULL
key next
21 23
22
void delete_next(struct list *p) {
struct list *q;
q = p->next;
p->next = q->next;
free(q);
}
この要素を削除(領域解放)する q
※ 見やすくするために位置をずらしましたが、
メモリ内で確保されている領域が 移動するわけではありません。
p key
next
key next
NULL
key next
21 23
22
struct list *q;
q = p->next;
p->next = q->next;
free(q);
}
q
この値をコピー
p key
next
key next
NULL
key next
21 23
22
void delete_next(struct list *p) {
struct list *q;
q = p->next;
p->next = q->next;
free(q);
}
q
この値をコピ ー
p key
next
key next
NULL
key next
21 23
22
struct list *q;
q = p->next;
p->next = q->next;
free(q);
}
q 領域を解放
p key
next NULL
key next
21 23
void delete_next(struct list *p) {
struct list *q;
q = p->next;
p->next = q->next;
free(q);
}
p key
next
key next
NULL
key next
21 23
22
struct list *q;
q = p->next;
p->next = q->next;
/*free(q);*/
}
領域解放を忘れると、メモリ内にリンクのない使えない領域が残り続ける。
(メモリリーク:メモリ漏れ; プログラムが進むにつれて、だんだんと使えるメモリが減っていく)
必ず、解放しよう!
福沢さんの番号
p
樋口さんの番号
野口さんの番号
NULL
福沢 野口
樋口 イメージ: 電話連絡網
この連絡網では、
「各人は、次に連絡を回す相手の電話番号だけ知っている。」
「連絡網が切れないように、途中にメンバーを削除する。」
この要素を削除する
福沢さんの番号
p
樋口さんの番号
野口さんの番号
NULL
福沢 野口
樋口 イメージ: 電話連絡網
この連絡網では、
「各人は、次に連絡を回す相手の電話番号だけ知っている。」
「連絡網が切れないように、途中にメンバーを削除する。」
この要素を削除する
struct list *q;
q = p->next;
p->next = q->next;
free(q);
}
q
福沢さんの番号
p
樋口さんの番号
野口さんの番号
NULL
福沢 野口
樋口 イメージ: 電話連絡網
この連絡網では、
「各人は、次に連絡を回す相手の電話番号だけ知っている。」
「連絡網が切れないように、途中にメンバーを削除する。」
void delete_next(struct list *p) {
struct list *q;
q = p->next;
p->next = q->next;
free(q);
}
樋口さんの番号
q
この値をコピー
あとで、本部から樋口さんに
「あなたは連絡網から削除されました」
と電話で伝える(解放する)ために 樋口さんの電話番号をメモしておく
福沢さんの番号
p
野口さんの番号
野口さんの番号
NULL
福沢 野口
樋口 イメージ: 電話連絡網
この連絡網では、
「各人は、次に連絡を回す相手の電話番号だけ知っている。」
「連絡網が切れないように、途中にメンバーを削除する。」
struct list *q;
q = p->next;
p->next = q->next;
free(q);
}
樋口さんの番号
q
この値をコピー
福沢さんの番号
p
野口さんの番号
野口さんの番号
NULL
福沢 野口
樋口 イメージ: 電話連絡網
この連絡網では、
「各人は、次に連絡を回す相手の電話番号だけ知っている。」
「連絡網が切れないように、途中にメンバーを削除する。」
void delete_next(struct list *p) {
struct list *q;
q = p->next;
p->next = q->next;
free(q);
}
樋口さんの番号
q
本部から樋口さんに
「あなたは連絡網から削除されました」
と電話を入れる(解放する)
福沢さんの番号
p
野口さんの番号 NULL
福沢 野口
イメージ: 電話連絡網 この連絡網では、
「各人は、次に連絡を回す相手の電話番号だけ知っている。」
「連絡網が切れないように、途中にメンバーを削除する。」
struct list *q;
q = p->next;
p->next = q->next;
free(q);
}
リストのオペレータ
1.生成
2.
表示(走査)
3.
挿入
4.削除
struct list * get_list( void ) {
int d; struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
}
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
} p
d
newp
struct list * get_list( void ) {
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
}
get_data()関数が返す値リスト
a[]={ 1, 2, 3, 4, 5, 6, EOD }
NULL p
d
newp
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
} NULL
p
1 d
newp
!=EOD
struct list * get_list( void ) {
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
}
get_data() 関数が返す値リスト
a[]={ 1, 2, 3, 4, 5, 6, EOD } EOD: -1※
NULL p
1 d
newp
key next
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
} NULL
p
1 d
newp
key next
1
struct list * get_list( void ) {
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
}
get_data() 関数が返す値リスト
a[]={ 1, 2, 3, 4, 5, 6, EOD } EOD: -1※
NULL p
1 d
newp
NULL
key next
1
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
} p
1 d
newp
NULL
key next
1
struct list * get_list( void ) {
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
}
get_data() 関数が返す値リスト
a[]={ 1, 2, 3, 4, 5, 6, EOD } EOD: -1※
p
2 d
newp
NULL
key next
1
!=EOD
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
} p
2 d
newp
NULL
key next
1
key next
struct list * get_list( void ) {
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
}
get_data() 関数が返す値リスト
a[]={ 1, 2, 3, 4, 5, 6, EOD } EOD: -1※
p
2 d
newp
NULL
key next
1
key next
2
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
} p
2 d
newp
NULL
key next
1
key next
2
struct list * get_list( void ) {
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
}
get_data() 関数が返す値リスト
a[]={ 1, 2, 3, 4, 5, 6, EOD } EOD: -1※
p
2 d
newp
NULL
key next
1
key next
2
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
} p
3 d
newp
NULL
key next
1
key next
2
!=EOD
struct list * get_list( void ) {
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
}
get_data() 関数が返す値リスト
a[]={ 1, 2, 3, 4, 5, 6, EOD } EOD: -1※
p
3 d
newp
NULL
key next
1
key next
2
key next
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
} p
3 d
newp
NULL
key next
1
key next
2
key next
3
struct list * get_list( void ) {
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
}
get_data() 関数が返す値リスト
a[]={ 1, 2, 3, 4, 5, 6, EOD } EOD: -1※
p
3 d
newp
NULL
key next
1
key next
2
key next
3
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
} p
3 d
newp
NULL
key next
1
key next
2
key next
3
struct list * get_list( void ) {
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
}
get_data() 関数が返す値リスト
a[]={ 1, 2, 3, 4, 5, 6, EOD } EOD: -1※
p
4 d
newp
NULL
key next
1
key next
2
key next
3
!=EOD
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
} p
4 d
newp
NULL
key next
1
key next
2
key next
3
key next
struct list * get_list( void ) {
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
}
get_data() 関数が返す値リスト
a[]={ 1, 2, 3, 4, 5, 6, EOD } EOD: -1※
p
4 d
newp
NULL
key next
1
key next
2
key next
3
key next
4
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
} p
4 d
newp
NULL
key next
1
key next
2
key next
3
key next
4
struct list * get_list( void ) {
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
}
get_data() 関数が返す値リスト
a[]={ 1, 2, 3, 4, 5, 6, EOD } EOD: -1※
p
4 d
newp
NULL
key next
1
key next
2
key next
3
key next
4
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
} p
5 d
newp
NULL
key next
1
key next
2
key next
3
key next
4
!=EOD
struct list * get_list( void ) {
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
}
get_data() 関数が返す値リスト
a[]={ 1, 2, 3, 4, 5, 6, EOD } EOD: -1※
p
5 d
newp
NULL
key next
1
key next
2
key next
3
key next
4
key next
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
} p
5 d
newp
NULL
key next
1
key next
2
key next
3
key next
4
key next
5
struct list * get_list( void ) {
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
}
get_data() 関数が返す値リスト
a[]={ 1, 2, 3, 4, 5, 6, EOD } EOD: -1※
p
5 d
newp
NULL
key next
1
key next
2
key next
3
key next
4
key next
5
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
} p
5 d
newp
NULL
key next
1
key next
2
key next
3
key next
4
key next
5
struct list * get_list( void ) {
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
}
get_data() 関数が返す値リスト
a[]={ 1, 2, 3, 4, 5, 6, EOD } EOD: -1※
p
6 d
newp
NULL
key next
1
key next
2
key next
3
key next
4
key next
5
!=EOD
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
} p
6 d
newp
NULL
key next
1
key next
2
key next
3
key next
4
key next
5
key next
struct list * get_list( void ) {
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
}
get_data() 関数が返す値リスト
a[]={ 1, 2, 3, 4, 5, 6, EOD } EOD: -1※
p
6 d
newp
NULL
key next
1
key next
2
key next
3
key next
4
key next
5
key next
6
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
} p
6 d
newp
NULL
key next
1
key next
2
key next
3
key next
4
key next
5
key next
6
struct list * get_list( void ) {
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
}
get_data() 関数が返す値リスト
a[]={ 1, 2, 3, 4, 5, 6, EOD } EOD: -1※
p
6 d
newp
NULL
key next
1
key next
2
key next
3
key next
4
key next
5
key next
6
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
} p
-1 d
newp
NULL
key next
1
key next
2
key next
3
key next
4
key next
5
key next
6
==EOD
struct list * get_list( void ) {
int d;
struct list *p,*newp;
p = NULL;
while( ( d = get_data( ) ) != EOD) {
newp = (struct list *)malloc(sizeof(struct list));
newp->key = d;
newp->next = p;
p = newp;
}
return p;
}
get_data() 関数が返す値リスト
a[]={ 1, 2, 3, 4, 5, 6, EOD } EOD: -1※
p
NULL
key next
1
key next
2
key next
3
key next
4
key next
5
key next
6