アルゴリズムとデータkida/lecture/alg2019-04.pdf2015/11/04 アルゴリズムとデータ構造2015 2 リスト •リストとは要素を0個以上1列に並べたもの
アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」
description
Transcript of アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」
![Page 1: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/1.jpg)
アルゴリズムとデータ構造補足資料 11-3「線形リストのオペレータ」
横浜国立大学理工学部 数物・電子情報系学科富井尚志
![Page 2: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/2.jpg)
p key
next
key
next NULLkey
next
21 2322
リストのオペレータ1. 生成2. 表示(走査)3. 挿入4. 削除
![Page 3: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/3.jpg)
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");}
![Page 4: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/4.jpg)
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");}
画面出力
![Page 5: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/5.jpg)
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
画面出力
![Page 6: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/6.jpg)
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>画面出力
![Page 7: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/7.jpg)
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>画面出力
![Page 8: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/8.jpg)
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
![Page 9: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/9.jpg)
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>画面出力
![Page 10: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/10.jpg)
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>画面出力
![Page 11: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/11.jpg)
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
![Page 12: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/12.jpg)
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>画面出力
![Page 13: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/13.jpg)
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>画面出力
![Page 14: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/14.jpg)
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
![Page 15: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/15.jpg)
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>画面出力
![Page 16: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/16.jpg)
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 )の際にも使う。
![Page 17: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/17.jpg)
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;}
![Page 18: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/18.jpg)
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
ここに挿入する
![Page 19: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/19.jpg)
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
この値をコピー
![Page 20: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/20.jpg)
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
この値をコピー
![Page 21: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/21.jpg)
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
![Page 22: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/22.jpg)
福沢さんの番号p樋口さんの番号 野口さんの番号 NULL
福沢 野口樋口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを挿入する。」
夏目さんの番号x 夏目
ここに挿入する
![Page 23: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/23.jpg)
福沢さんの番号p樋口さんの番号 野口さんの番号 NULL
福沢 野口樋口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを挿入する。」
夏目さんの番号x樋口さんの番号
夏目
void insert_after(struct list *x, struct list *p){ x->next = p->next; p->next = x;}
この値をコピー
![Page 24: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/24.jpg)
福沢さんの番号p夏目さんの番号 野口さんの番号 NULL
福沢 野口樋口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを挿入する。」
夏目さんの番号x樋口さんの番号
夏目
void insert_after(struct list *x, struct list *p){ x->next = p->next; p->next = x;}
この値をコピー
![Page 25: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/25.jpg)
福沢さんの番号p夏目さんの番号 野口さんの番号 NULL
福沢 野口樋口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを挿入する。」
夏目さんの番号x樋口さんの番号
夏目
void insert_after(struct list *x, struct list *p){ x->next = p->next; p->next = x;}
![Page 26: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/26.jpg)
福沢さんの番号p夏目さんの番号 野口さんの番号 NULL
福沢 野口樋口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを挿入する。」
樋口さんの番号夏目
void insert_after(struct list *x, struct list *p){ x->next = p->next; p->next = x;}
番号の写し順に注意!
![Page 27: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/27.jpg)
福沢さんの番号p樋口さんの番号 野口さんの番号 NULL
福沢 野口樋口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを挿入する。」
夏目さんの番号x 夏目
ここに挿入する
番号の写し順に注意!先に、福沢さんの覚えている樋口さんの電話番号を、メモをとらずに(憶えておかずに)夏目さんの電話番号に書き換えてしまうと。。。
![Page 28: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/28.jpg)
福沢さんの番号p夏目さんの番号 野口さんの番号 NULL
福沢 野口樋口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを挿入する。」
夏目さんの番号x 夏目
番号の写し順に注意!先に、福沢さんの覚えている樋口さんの電話番号を、メモをとらずに(憶えておかずに)夏目さんの電話番号に書き換えてしまうと。。。
![Page 29: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/29.jpg)
福沢さんの番号p夏目さんの番号 野口さんの番号 NULL
福沢 野口樋口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを挿入する。」
夏目さんの番号x 夏目 ?番号の写し順に注意!先に、福沢さんの覚えている樋口さんの電話番号を、メモをとらずに(憶えておかずに)夏目さんの電話番号に書き換えてしまうと。。。樋口さんの電話番号がわからなくなる! ので、連絡網が切れてしまう。
void insert_after(struct list *x, struct list *p){ x->next = p->next; p->next = x;}
![Page 30: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/30.jpg)
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);}
削除がないと、領域を解放しないので、増加しっぱなし。
![Page 31: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/31.jpg)
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
![Page 32: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/32.jpg)
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
※ 見やすくするために位置をずらしましたが、 メモリ内で確保されている領域が 移動するわけではありません。
![Page 33: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/33.jpg)
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
この値をコピー
![Page 34: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/34.jpg)
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
この値をコピー
![Page 35: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/35.jpg)
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 領域を解放
![Page 36: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/36.jpg)
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);}
![Page 37: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/37.jpg)
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);*/}
領域解放を忘れると、メモリ内にリンクのない使えない領域が残り続ける。(メモリリーク:メモリ漏れ; プログラムが進むにつれて、だんだんと使えるメモリが減っていく)
必ず、解放しよう!
![Page 38: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/38.jpg)
福沢さんの番号p樋口さんの番号
野口さんの番号
NULL福沢 野口
樋口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを削除する。」
この要素を削除する
![Page 39: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/39.jpg)
福沢さんの番号p樋口さんの番号
野口さんの番号
NULL福沢 野口
樋口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを削除する。」
この要素を削除する
void delete_next(struct list *p){ struct list *q; q = p->next; p->next = q->next; free(q);}
q
![Page 40: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/40.jpg)
福沢さんの番号p樋口さんの番号
野口さんの番号
NULL福沢 野口
樋口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを削除する。」
void delete_next(struct list *p){ struct list *q; q = p->next; p->next = q->next; free(q);}
樋口さんの番号q
この値をコピー
あとで、本部から樋口さんに「あなたは連絡網から削除されました」と電話で伝える(解放する)ために樋口さんの電話番号をメモしておく
![Page 41: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/41.jpg)
福沢さんの番号p野口さんの番号
野口さんの番号
NULL福沢 野口
樋口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを削除する。」
void delete_next(struct list *p){ struct list *q; q = p->next; p->next = q->next; free(q);}
樋口さんの番号q
この値をコピー
![Page 42: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/42.jpg)
福沢さんの番号p野口さんの番号
野口さんの番号
NULL福沢 野口
樋口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを削除する。」
void delete_next(struct list *p){ struct list *q; q = p->next; p->next = q->next; free(q);}
樋口さんの番号q
本部から樋口さんに「あなたは連絡網から削除されました」と電話を入れる(解放する)
![Page 43: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/43.jpg)
福沢さんの番号p野口さんの番号 NULL
福沢 野口
イメージ: 電話連絡網この連絡網では、「各人は、次に連絡を回す相手の電話番号だけ知っている。」「連絡網が切れないように、途中にメンバーを削除する。」
void delete_next(struct list *p){ struct list *q; q = p->next; p->next = q->next; free(q);}
![Page 44: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/44.jpg)
リストのオペレータ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; }
![Page 45: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/45.jpg)
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
![Page 46: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/46.jpg)
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
![Page 47: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/47.jpg)
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
![Page 48: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/48.jpg)
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
![Page 49: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/49.jpg)
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
![Page 50: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/50.jpg)
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
![Page 51: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/51.jpg)
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
![Page 52: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/52.jpg)
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
![Page 53: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/53.jpg)
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
![Page 54: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/54.jpg)
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
![Page 55: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/55.jpg)
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
![Page 56: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/56.jpg)
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
![Page 57: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/57.jpg)
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
![Page 58: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/58.jpg)
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
![Page 59: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/59.jpg)
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
![Page 60: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/60.jpg)
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
![Page 61: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/61.jpg)
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
![Page 62: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/62.jpg)
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
![Page 63: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/63.jpg)
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
![Page 64: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/64.jpg)
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
![Page 65: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/65.jpg)
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
![Page 66: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/66.jpg)
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
![Page 67: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/67.jpg)
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
![Page 68: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/68.jpg)
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
![Page 69: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/69.jpg)
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
![Page 70: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/70.jpg)
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
![Page 71: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/71.jpg)
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
![Page 72: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/72.jpg)
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
![Page 73: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/73.jpg)
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
![Page 74: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/74.jpg)
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
![Page 75: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/75.jpg)
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
![Page 76: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/76.jpg)
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
![Page 77: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/77.jpg)
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
![Page 78: アルゴリズムとデータ構造 補足資料 11-3 「線形リストのオペレータ」](https://reader036.fdocuments.net/reader036/viewer/2022062222/56816151550346895dd0da3a/html5/thumbnails/78.jpg)
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