アルゴリズム入門(1shuichi/algintro/alg-1s.pdf · 7 アルゴリズムの例(最大公約数を求める問題) ユークリッドの互除法(世界最古のアルゴリズム)
アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」
description
Transcript of アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」
アルゴリズムとデータ構造補足資料 11-3「線形リストのオペレータ」
横浜国立大学理工学部 数物・電子情報系学科富井尚志
p key
next
key
next NULLkey
next
21 2322
リストのオペレータ1. 生成2. 表示(走査)3. 挿入4. 削除
p key
next
key
next NULLkey
next
21 2322
リストのオペレータ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 NULLkey
next
21 2322
void print_list(struct list *p) { while (p != NULL) { printf("<%d> ", p->key); p = p->next; } printf("\n");}
画面出力
p
key
next
key
next NULLkey
next
21 2322
void print_list(struct list *p) { while (p != NULL) { printf("<%d> ", p->key); p = p->next; } printf("\n");}!=NULL
画面出力
p
key
next
key
next NULLkey
next
21 2322
void print_list(struct list *p) { while (p != NULL) { printf("<%d> ", p->key); p = p->next; } printf("\n");}
<21>画面出力
p
key
next
key
next NULLkey
next
21 2322
void print_list(struct list *p) { while (p != NULL) { printf("<%d> ", p->key); p = p->next; } printf("\n");}
<21>画面出力
p
key
next
key
next NULLkey
next
21 2322
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 NULLkey
next
21 2322
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 NULLkey
next
21 2322
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 NULLkey
next
21 2322
void print_list(struct list *p) { while (p != NULL) { printf("<%d> ", p->key); p = p->next; } printf("\n");}
<21> <22>画面出力
!=NULL
p
key
next
key
next NULLkey
next
21 2322
void print_list(struct list *p) { while (p != NULL) { printf("<%d> ", p->key); p = p->next; } printf("\n");}
<21> <22> <23>画面出力
NULLp
key
next
key
next NULLkey
next
21 2322
void print_list(struct list *p) { while (p != NULL) { printf("<%d> ", p->key); p = p->next; } printf("\n");}
<21> <22> <23>画面出力
NULLp
key
next
key
next NULLkey
next
21 2322
void print_list(struct list *p) { while (p != NULL) { printf("<%d> ", p->key); p = p->next; } printf("\n");}
<21> <22> <23>画面出力
==NULL
NULLp
key
next
key
next NULLkey
next
21 2322
void print_list(struct list *p) { while (p != NULL) { printf("<%d> ", p->key); p = p->next; } printf("\n");}
<21> <22> <23>画面出力
NULLp
key
next
key
next NULLkey
next
21 2322
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 NULLkey
next
21 2322
リストのオペレータ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 NULLkey
next
21 2322
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 NULLkey
next
21 2322
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 NULLkey
next
21 2322
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 NULLkey
next
21 2322
void insert_after(struct list *x, struct list *p){ x->next = p->next; p->next = x;}
x key
next
30
福沢さんの番号p樋口さんの番号 野口さんの番号 NULL
福沢 野口樋口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを挿入する。」
夏目さんの番号x 夏目
ここに挿入する
福沢さんの番号p樋口さんの番号 野口さんの番号 NULL
福沢 野口樋口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを挿入する。」
夏目さんの番号x樋口さんの番号
夏目
void insert_after(struct list *x, struct list *p){ 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樋口さんの番号
夏目
void insert_after(struct list *x, struct list *p){ 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 夏目 ?番号の写し順に注意!先に、福沢さんの覚えている樋口さんの電話番号を、メモをとらずに(憶えておかずに)夏目さんの電話番号に書き換えてしまうと。。。樋口さんの電話番号がわからなくなる! ので、連絡網が切れてしまう。
void insert_after(struct list *x, struct list *p){ x->next = p->next; p->next = x;}
p key
next
key
next NULLkey
next
21 2322
リストのオペレータ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 NULLkey
next
21 2322
void delete_next(struct list *p){ struct list *q; q = p->next; p->next = q->next; free(q);}
この要素を削除(領域解放)するq
p key
next
key
next
NULLkey
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
NULLkey
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
NULLkey
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
NULLkey
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 NULLkey
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
NULLkey
next
21 23
22
void delete_next(struct list *p){ struct list *q; q = p->next; p->next = q->next; /*free(q);*/}
領域解放を忘れると、メモリ内にリンクのない使えない領域が残り続ける。(メモリリーク:メモリ漏れ; プログラムが進むにつれて、だんだんと使えるメモリが減っていく)
必ず、解放しよう!
福沢さんの番号p樋口さんの番号
野口さんの番号
NULL福沢 野口
樋口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを削除する。」
この要素を削除する
福沢さんの番号p樋口さんの番号
野口さんの番号
NULL福沢 野口
樋口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを削除する。」
この要素を削除する
void delete_next(struct list *p){ 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福沢 野口
樋口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを削除する。」
void delete_next(struct list *p){ 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
福沢 野口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを削除する。」
void delete_next(struct list *p){ 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; }
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 }
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 }
NULLp
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 } EOD: -1※
NULLp
1d
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※
NULLp
1d
newp
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※
NULLp
1d
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※
NULLp
1d
newp
NULLkey
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
1d
newp
NULLkey
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
2d
newp
NULLkey
next
1
!=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
2d
newp
NULLkey
next
1key
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
2d
newp
NULLkey
next
1key
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
2d
newp
NULLkey
next
1key
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
2d
newp
NULLkey
next
1key
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
3d
newp
NULLkey
next
1key
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
3d
newp
NULLkey
next
1key
next
2key
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
3d
newp
NULLkey
next
1key
next
2key
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
3d
newp
NULLkey
next
1key
next
2key
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
3d
newp
NULLkey
next
1key
next
2key
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
4d
newp
NULLkey
next
1key
next
2key
next
3
!=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
4d
newp
NULLkey
next
1key
next
2key
next
3key
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
4d
newp
NULLkey
next
1key
next
2key
next
3key
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
4d
newp
NULLkey
next
1key
next
2key
next
3key
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
4d
newp
NULLkey
next
1key
next
2key
next
3key
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
5d
newp
NULLkey
next
1key
next
2key
next
3key
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
5d
newp
NULLkey
next
1key
next
2key
next
3key
next
4key
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
5d
newp
NULLkey
next
1key
next
2key
next
3key
next
4key
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
5d
newp
NULLkey
next
1key
next
2key
next
3key
next
4key
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
5d
newp
NULLkey
next
1key
next
2key
next
3key
next
4key
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
6d
newp
NULLkey
next
1key
next
2key
next
3key
next
4key
next
5
!=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
6d
newp
NULLkey
next
1key
next
2key
next
3key
next
4key
next
5key
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
6d
newp
NULLkey
next
1key
next
2key
next
3key
next
4key
next
5key
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
6d
newp
NULLkey
next
1key
next
2key
next
3key
next
4key
next
5key
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
6d
newp
NULLkey
next
1key
next
2key
next
3key
next
4key
next
5key
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
-1d
newp
NULLkey
next
1key
next
2key
next
3key
next
4key
next
5key
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
NULLkey
next
1key
next
2key
next
3key
next
4key
next
5key
next
6