• 検索結果がありません。

リストのオペレータ1.生成2.表示(走査)3.挿入4.削除

N/A
N/A
Protected

Academic year: 2021

シェア "リストのオペレータ1.生成2.表示(走査)3.挿入4.削除"

Copied!
78
0
0

読み込み中.... (全文を見る)

全文

(1)

補足資料

11-3

「線形リストのオペレータ」

横浜国立大学 理工学部 数物・電子情報系学科 富井尚志

(2)

p key

next

key

next NULL

key next

21 22 23

リストのオペレータ

1.

生成

2.

表示(走査)

3.

挿入

4.

削除

(3)

p key

next

key

next NULL

key next

21 22 23

1.

生成

2.

表示(走査)

3.

挿入

4.

削除

void print_list(struct list *p) {

while (p != NULL) {

printf("<%d> ", p->key);

p = p->next;

}

printf("\n");

}

(4)

p

key next

key

next NULL

key next

21 22 23

void print_list(struct list *p) {

while (p != NULL) {

printf("<%d> ", p->key);

p = p->next;

}

printf("\n");

}

画面出力

(5)

p

key next

key

next NULL

key next

21 22 23

while (p != NULL) {

printf("<%d> ", p->key);

p = p->next;

}

printf("\n");

!=NULL }

画面出力

(6)

p

key next

key

next 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>

画面出力

(7)

p

key next

key

next NULL

key next

21 22 23

while (p != NULL) {

printf("<%d> ", p->key);

p = p->next;

}

printf("\n");

}

<21>

画面出力

(8)

p

key next

key

next 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>

画面出力

!=NULL

(9)

p

key next

key

next NULL

key next

21 22 23

while (p != NULL) {

printf("<%d> ", p->key);

p = p->next;

}

printf("\n");

}

<21> <22>

画面出力

(10)

p

key next

key

next 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> <22>

画面出力

(11)

p

key next

key

next NULL

key next

21 22 23

while (p != NULL) {

printf("<%d> ", p->key);

p = p->next;

}

printf("\n");

}

<21> <22>

画面出力

!=NULL

(12)

p

key next

key

next 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> <22> <23>

画面出力

(13)

NULL p

key next

key

next NULL

key next

21 22 23

while (p != NULL) {

printf("<%d> ", p->key);

p = p->next;

}

printf("\n");

}

<21> <22> <23>

画面出力

(14)

NULL p

key next

key

next 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> <22> <23>

画面出力

==NULL

(15)

NULL p

key next

key

next NULL

key next

21 22 23

while (p != NULL) {

printf("<%d> ", p->key);

p = p->next;

}

printf("\n");

}

<21> <22> <23>

画面出力

(16)

NULL p

key next

key

next 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> <22> <23>

画面出力

走査( scan )とは、一つ一つの要素のキーを見ていくこと。

「探索」( search )の際にも使う。

(17)

p key

next

key

next NULL

key next

21 22 23

1.

生成

2.

表示(走査)

3.

挿入

4.

削除

void insert_after(struct list *x, struct list *p) { x->next = p->next;

p->next = x;

}

(18)

p key

next

key

next NULL

key next

21 22 23

void insert_after(struct list *x, struct list *p) {

x->next = p->next;

p->next = x;

}

x key

next

30

ここに挿入する

(19)

p key

next

key

next NULL

key next

21 22 23

x->next = p->next;

p->next = x;

}

x key

next

30 この値をコピ

(20)

p key

next

key

next NULL

key next

21 22 23

void insert_after(struct list *x, struct list *p) {

x->next = p->next;

p->next = x;

}

x key

next

30 この値をコピ

(21)

p key

next

key

next NULL

key next

21 22 23

x->next = p->next;

p->next = x;

}

x key

next

30

(22)

福沢さんの番号

p

樋口さんの番号 野口さんの番号 NULL

福沢 樋口 野口

イメージ: 電話連絡網 この連絡網では、

「各人は、次に連絡を回す相手の電話番号だけ知っている。」

「連絡網が切れないように、途中にメンバーを挿入する。」

夏目さんの番号

x 夏目

ここに挿入する

(23)

福沢さんの番号

p

樋口さんの番号 野口さんの番号 NULL

福沢 樋口 野口

イメージ: 電話連絡網 この連絡網では、

「各人は、次に連絡を回す相手の電話番号だけ知っている。」

「連絡網が切れないように、途中にメンバーを挿入する。」

夏目さんの番号

x

樋口さんの番号

夏目

x->next = p->next;

p->next = x;

}

この値をコピ ー

(24)

福沢さんの番号

p

夏目さんの番号 野口さんの番号 NULL

福沢 樋口 野口

イメージ: 電話連絡網 この連絡網では、

「各人は、次に連絡を回す相手の電話番号だけ知っている。」

「連絡網が切れないように、途中にメンバーを挿入する。」

夏目さんの番号

x

樋口さんの番号

夏目

void insert_after(struct list *x, struct list *p) {

x->next = p->next;

p->next = x;

}

この値をコピ ー

(25)

福沢さんの番号

p

夏目さんの番号 野口さんの番号 NULL

福沢 樋口 野口

イメージ: 電話連絡網 この連絡網では、

「各人は、次に連絡を回す相手の電話番号だけ知っている。」

「連絡網が切れないように、途中にメンバーを挿入する。」

夏目さんの番号

x

樋口さんの番号

夏目

x->next = p->next;

p->next = x;

}

(26)

福沢さんの番号

p

夏目さんの番号 野口さんの番号 NULL

福沢 樋口 野口

イメージ: 電話連絡網 この連絡網では、

「各人は、次に連絡を回す相手の電話番号だけ知っている。」

「連絡網が切れないように、途中にメンバーを挿入する。」

樋口さんの番号

夏目

void insert_after(struct list *x, struct list *p) {

x->next = p->next;

p->next = x;

}

番号の写し順に注意!

(27)

福沢さんの番号

p

樋口さんの番号 野口さんの番号 NULL

福沢 樋口 野口

この連絡網では、

「各人は、次に連絡を回す相手の電話番号だけ知っている。」

「連絡網が切れないように、途中にメンバーを挿入する。」

夏目さんの番号

x 夏目

ここに挿入する

番号の写し順に注意!

先に、福沢さんの覚えている樋口さんの電話番号を、

メモをとらずに(憶えておかずに)夏目さんの電話番号に書き換えてしまうと。。。

(28)

福沢さんの番号

p

夏目さんの番号 野口さんの番号 NULL

福沢 樋口 野口

イメージ: 電話連絡網 この連絡網では、

「各人は、次に連絡を回す相手の電話番号だけ知っている。」

「連絡網が切れないように、途中にメンバーを挿入する。」

夏目さんの番号

x 夏目

番号の写し順に注意!

先に、福沢さんの覚えている樋口さんの電話番号を、

メモをとらずに(憶えておかずに)夏目さんの電話番号に書き換えてしまうと。。。

(29)

福沢さんの番号

p

夏目さんの番号 野口さんの番号 NULL

福沢 樋口 野口

イメージ: 電話連絡網 この連絡網では、

「各人は、次に連絡を回す相手の電話番号だけ知っている。」

「連絡網が切れないように、途中にメンバーを挿入する。」

夏目さんの番号

x 夏目

番号の写し順に注意! ?

先に、福沢さんの覚えている樋口さんの電話番号を、

メモをとらずに(憶えておかずに)夏目さんの電話番号に書き換えてしまうと。。。

樋口さんの電話番号がわからなくなる! ので、連絡網が切れてしまう。

x->next = p->next;

p->next = x;

}

(30)

p key

next

key

next NULL

key next

21 22 23

リストのオペレータ

1.

生成

2.

表示(走査)

3.

挿入

4.

削除

void delete_next(struct list *p) {

struct list *q;

q = p->next;

p->next = q->next;

free(q);

}

削除がないと、領域を解放しないので、増加しっぱなし。

(31)

p key

next

key

next NULL

key next

21 22 23

struct list *q;

q = p->next;

p->next = q->next;

free(q);

}

この要素を削除(領域解放)する q

(32)

p key

next

key next

NULL

key next

21 23

22

void delete_next(struct list *p) {

struct list *q;

q = p->next;

p->next = q->next;

free(q);

}

この要素を削除(領域解放)する q

※ 見やすくするために位置をずらしましたが、

メモリ内で確保されている領域が 移動するわけではありません。

(33)

p key

next

key next

NULL

key next

21 23

22

struct list *q;

q = p->next;

p->next = q->next;

free(q);

}

q

この値をコピー

(34)

p key

next

key next

NULL

key next

21 23

22

void delete_next(struct list *p) {

struct list *q;

q = p->next;

p->next = q->next;

free(q);

}

q

この値をコピ ー

(35)

p key

next

key next

NULL

key next

21 23

22

struct list *q;

q = p->next;

p->next = q->next;

free(q);

}

q 領域を解放

(36)

p key

next NULL

key next

21 23

void delete_next(struct list *p) {

struct list *q;

q = p->next;

p->next = q->next;

free(q);

}

(37)

p key

next

key next

NULL

key next

21 23

22

struct list *q;

q = p->next;

p->next = q->next;

/*free(q);*/

}

領域解放を忘れると、メモリ内にリンクのない使えない領域が残り続ける。

(メモリリーク:メモリ漏れ; プログラムが進むにつれて、だんだんと使えるメモリが減っていく)

必ず、解放しよう!

(38)

福沢さんの番号

p

樋口さんの番号

野口さんの番号

NULL

福沢 野口

樋口 イメージ: 電話連絡網

この連絡網では、

「各人は、次に連絡を回す相手の電話番号だけ知っている。」

「連絡網が切れないように、途中にメンバーを削除する。」

この要素を削除する

(39)

福沢さんの番号

p

樋口さんの番号

野口さんの番号

NULL

福沢 野口

樋口 イメージ: 電話連絡網

この連絡網では、

「各人は、次に連絡を回す相手の電話番号だけ知っている。」

「連絡網が切れないように、途中にメンバーを削除する。」

この要素を削除する

struct list *q;

q = p->next;

p->next = q->next;

free(q);

}

q

(40)

福沢さんの番号

p

樋口さんの番号

野口さんの番号

NULL

福沢 野口

樋口 イメージ: 電話連絡網

この連絡網では、

「各人は、次に連絡を回す相手の電話番号だけ知っている。」

「連絡網が切れないように、途中にメンバーを削除する。」

void delete_next(struct list *p) {

struct list *q;

q = p->next;

p->next = q->next;

free(q);

}

樋口さんの番号

q

この値をコピー

あとで、本部から樋口さんに

「あなたは連絡網から削除されました」

と電話で伝える(解放する)ために 樋口さんの電話番号をメモしておく

(41)

福沢さんの番号

p

野口さんの番号

野口さんの番号

NULL

福沢 野口

樋口 イメージ: 電話連絡網

この連絡網では、

「各人は、次に連絡を回す相手の電話番号だけ知っている。」

「連絡網が切れないように、途中にメンバーを削除する。」

struct list *q;

q = p->next;

p->next = q->next;

free(q);

}

樋口さんの番号

q

この値をコピー

(42)

福沢さんの番号

p

野口さんの番号

野口さんの番号

NULL

福沢 野口

樋口 イメージ: 電話連絡網

この連絡網では、

「各人は、次に連絡を回す相手の電話番号だけ知っている。」

「連絡網が切れないように、途中にメンバーを削除する。」

void delete_next(struct list *p) {

struct list *q;

q = p->next;

p->next = q->next;

free(q);

}

樋口さんの番号

q

本部から樋口さんに

「あなたは連絡網から削除されました」

と電話を入れる(解放する)

(43)

福沢さんの番号

p

野口さんの番号 NULL

福沢 野口

イメージ: 電話連絡網 この連絡網では、

「各人は、次に連絡を回す相手の電話番号だけ知っている。」

「連絡網が切れないように、途中にメンバーを削除する。」

struct list *q;

q = p->next;

p->next = q->next;

free(q);

}

(44)

リストのオペレータ

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;

}

(45)

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

d

newp

(46)

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 }

NULL p

d

newp

(47)

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;

} NULL

p

1 d

newp

!=EOD

(48)

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

NULL p

1 d

newp

key next

(49)

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;

} NULL

p

1 d

newp

key next

1

(50)

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

NULL p

1 d

newp

NULL

key next

1

(51)

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

1 d

newp

NULL

key next

1

(52)

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

2 d

newp

NULL

key next

1

!=EOD

(53)

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

2 d

newp

NULL

key next

1

key next

(54)

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

2 d

newp

NULL

key next

1

key next

2

(55)

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

2 d

newp

NULL

key next

1

key next

2

(56)

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

2 d

newp

NULL

key next

1

key next

2

(57)

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

3 d

newp

NULL

key next

1

key next

2

!=EOD

(58)

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

3 d

newp

NULL

key next

1

key next

2

key next

(59)

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

3 d

newp

NULL

key next

1

key next

2

key next

3

(60)

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

3 d

newp

NULL

key next

1

key next

2

key next

3

(61)

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

3 d

newp

NULL

key next

1

key next

2

key next

3

(62)

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

4 d

newp

NULL

key next

1

key next

2

key next

3

!=EOD

(63)

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

4 d

newp

NULL

key next

1

key next

2

key next

3

key next

(64)

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

4 d

newp

NULL

key next

1

key next

2

key next

3

key next

4

(65)

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

4 d

newp

NULL

key next

1

key next

2

key next

3

key next

4

(66)

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

4 d

newp

NULL

key next

1

key next

2

key next

3

key next

4

(67)

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

5 d

newp

NULL

key next

1

key next

2

key next

3

key next

4

!=EOD

(68)

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

5 d

newp

NULL

key next

1

key next

2

key next

3

key next

4

key next

(69)

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

5 d

newp

NULL

key next

1

key next

2

key next

3

key next

4

key next

5

(70)

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

5 d

newp

NULL

key next

1

key next

2

key next

3

key next

4

key next

5

(71)

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

5 d

newp

NULL

key next

1

key next

2

key next

3

key next

4

key next

5

(72)

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

6 d

newp

NULL

key next

1

key next

2

key next

3

key next

4

key next

5

!=EOD

(73)

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

6 d

newp

NULL

key next

1

key next

2

key next

3

key next

4

key next

5

key next

(74)

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

6 d

newp

NULL

key next

1

key next

2

key next

3

key next

4

key next

5

key next

6

(75)

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

6 d

newp

NULL

key next

1

key next

2

key next

3

key next

4

key next

5

key next

6

(76)

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

6 d

newp

NULL

key next

1

key next

2

key next

3

key next

4

key next

5

key next

6

(77)

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

-1 d

newp

NULL

key next

1

key next

2

key next

3

key next

4

key next

5

key next

6

==EOD

(78)

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

NULL

key next

1

key next

2

key next

3

key next

4

key next

5

key next

6

参照

関連したドキュメント

情報理工学研究科 情報・通信工学専攻. 2012/7/12

関東総合通信局 東京電機大学 工学部電気電子工学科 電気通信システム 昭和62年3月以降

理工学部・情報理工学部・生命科学部・薬学部 AO 英語基準入学試験【4 月入学】 国際関係学部・グローバル教養学部・情報理工学部 AO

清水 悦郎 国立大学法人東京海洋大学 学術研究院海洋電子機械工学部門 教授 鶴指 眞志 長崎県立大学 地域創造学部実践経済学科 講師 クロサカタツヤ 株式会社企 代表取締役.

静岡大学 静岡キャンパス 静岡大学 浜松キャンパス 静岡県立大学 静岡県立大学短期大学部 東海大学 清水キャンパス

講師:首都大学東京 システムデザイン学部 知能機械システムコース 准教授 三好 洋美先生 芝浦工業大学 システム理工学部 生命科学科 助教 中村

静岡大学 静岡キャンパス 静岡大学 浜松キャンパス 静岡県立大学 静岡県立大学短期大学部 東海大学 清水キャンパス

1年次 2年次 3年次 3年次 4年次. A学部入学