アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」
DESCRIPTION
アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」. 横浜国立大学 理工 学部 数物・電子情報系学科 富井尚志. リストのオペレータ 生成 表示(走査) 挿入 削除. p. key. 21. key. 22. key. 23. next. next. next. NULL. リストのオペレータ 生成 表示(走査) 挿入 削除. p. key. 21. key. 22. key. 23. next. next. next. NULL. - PowerPoint PPT PresentationTRANSCRIPT
アルゴリズムとデータ構造補足資料 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