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