スライド 1

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