exp2-02 intro.ppt [互換モード] - kagoshima u · –...

47
情報工学実験II 実験2 アルゴリズム (リスト構造とハッシュ) 0.プログラム書ける? 1.アドレスとポインタ 2.構造体 3.構造体とポインタ 4.リスト構造 実験を始める前に... C言語を復習しよう

Upload: others

Post on 22-May-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

情報工学実験II実験2 アルゴリズム

(リスト構造とハッシュ)

0.プログラム書ける?

1.アドレスとポインタ

2.構造体

3.構造体とポインタ

4.リスト構造

実験を始める前に...C言語を復習しよう

Page 2: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

0.プログラム書ける?

講義を聴いているだけでOK?

言語の要素技術を覚えればOK?

配列

データ型関数

クラス

オブジェクトポインタ

文字列

要素技術

目的のプログラム

2

Page 3: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

0.プログラム書ける?

講義を聴いているだけでOK?

言語の要素技術を覚えればOK?

配列

データ型関数

クラス

オブジェクトポインタ

文字列

要素技術

目的のプログラム

?データ構造 アルゴリズム

3

Page 4: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

0.プログラム書ける?

よく使われるデータ構造やアルゴリズムをパターンとして習得し,目的に応じて使い分ける.

どんなプログラムを書けばよいかを考える...

– プログラムを構成する3要素を意識する.

入力

(内部)処理

出力

プログラム

入力データ

出力データ 4

Page 5: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

0.プログラム書ける?

教科書(入門書)やチュートリアルに書かれているサンプルプログラムを書き写す(写経).

– コピー&ペーストは駄目!

– 本1冊分のサンプルプログラムを打ち込んでみるべし.

– いろいろなコンパイルエラーに遭遇しよう.

リファレンスの引き方を覚える.

– その場その場で必要な関数やクラスを調べる能力.

– 標準関数やライブラリを必ずしも全て覚える必要はない.

「プログラムが苦手」と感じる人は...

5

Page 6: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

0.プログラム書ける?

目的に応じたデータ構造を考え,処理の手順(アルゴリズム)を考える.

– 「このデータを扱うならリストで」,「この問題は要素間に親子関係があるから木構造で」

デバッガやプロファイラなどのツールを積極的に使う.

– 統合開発環境は開発者の必携ツール

外部ライブラリ等を調べて使う.

– 典型的なソースは自分で書かない方がよいこともある.

性能,信頼性,汎用性,etc.

簡単なプログラムが書けるようになったら...

6

Page 7: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

本日の実験で作るプログラム

Federer 11255 Nadal 8845 Murray 8390 Djokovic 7330

Federer11255

Nadal8845

Murray8390

Djokovic7330

next next next next=null

ノード ノード ノード ノード

ルート

7

Page 8: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

情報工学実験II実験2 アルゴリズム

(リスト構造とハッシュ)

0.プログラム書ける?

1.アドレスとポインタ

2.構造体

3.構造体とポインタ

4.リスト構造

実験を始める前に...C言語を復習しよう

Page 9: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

1.アドレスとポインタ

アドレス: メモリ空間内の住所

0a ・・・

: 1 byte

7f aa 30 00 17 90 2300 12

90

= =

10010000 8 bits9

Page 10: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

1.アドレスとポインタ

アドレス: メモリ空間内の住所

・・・

: 1 byte

00 00 00 7b(123(10進数))

整数型aのメモリ領域が確保され,123が格納される.

int型: 4byteのメモリを使用 10

Page 11: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

1.アドレスとポインタ

実際に確認してみよう.

11

Page 12: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

1.アドレスとポインタ

ポインタ: アドレスを格納する「変数」

int a = 0, b = 00

12ff60a

012ff61

b

???

12ff62

p(ポインタ)

int *p

p = &a0

12ff600

12ff61

12ff6012ff62

012ff60

012ff61

*p = 10012ff6012ff62

10012ff60

012ff61

b = *p + 112ff6012ff62

10012ff60

10112ff61

メモリのアドレス

メモリに格納された値

(ポインタpをint型ポインタとして宣言)

(ポインタpに変数aのアドレスを代入)

(ポインタpが指すアドレスに100を格納)

(ポインタpが指すアドレスに格納されている値に1を足した値を変数bに格納) +1 12

Page 13: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

1.アドレスとポインタ

ポインタ: アドレスを格納する「変数」

変数a, bに格納されている値は?

13

Page 14: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

1.アドレスとポインタ

void *malloc( size_t size ):指定されたバイト分のメモリ領域を確保する.確保した領域の先頭のアドレスを返す.

sizeof 演算子:指定されたデータ型のメモリ領域サイズを返す.

int型のメモリ領域を確保し,その先頭のアドレスをポインタiに記憶させる.

14

Page 15: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

1.アドレスとポインタ

ポインタ: アドレスを格納する変数

...データ型毎に区別しなくてもよいのでは?

データ型毎にメモリ量が異なる

15

Page 16: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

情報工学実験II実験2 アルゴリズム

(リスト構造とハッシュ)

0.プログラム書ける?

1.アドレスとポインタ

2.構造体

3.構造体とポインタ

4.リスト構造

実験を始める前に...C言語を復習しよう

Page 17: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

Member(member型変数)

2.構造体

構造体:様々なデータ(メンバ)をまとめて扱うデータ型

構造体変数Memberを宣言すると同時に、データ型memberとして定義

↓以降、memberをintやcharと同様に使えるようになる

12ff58

???

name

12ff5c

???

point

12ff60

???

age(char型ポインタ) (int型変数) (int型変数)

17

Page 18: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

???

2.構造体

構造体の宣言および利用方法

– メンバはピリオド(.)を用いて指定

bob

12ff58

???

name

12ff5c

???

point

12ff60

???

age

394670

Bobmallocで確保strcpyで格納

(char型ポインタ) (int型変数) (int型変数)

12ff5c

???

12ff60

???100 21

12ff58

???394670

12ff5c

100

12ff5c

394670

Bob

12ff58

394670

18

Page 19: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

情報工学実験II実験2 アルゴリズム

(リスト構造とハッシュ)

0.プログラム書ける?

1.アドレスとポインタ

2.構造体

3.構造体とポインタ

4.リスト構造

実験を始める前に...C言語を復習しよう

Page 20: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

構造体の最初のアドレスを記憶

12ff60

???

3.構造体とポインタ 構造体を参照するポインタ

– メンバはアロー演算子(->)を用いて指定

member

394670

???

name394674

???

point394678

???

agejohn

(member型ポインタ)

3946a8

???

mallocで確保

mallocで確保

394670

???

394674

???

394678

???394670

strcpyで格納John

3946a8

394670

3946a8

394670

3946a8

John

394674

50

394674

50

394678

19

20

Page 21: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

情報工学実験II実験2 アルゴリズム

(リスト構造とハッシュ)

0.プログラム書ける?

1.アドレスとポインタ

2.構造体

3.構造体とポインタ

4.リスト構造

実験を始める前に...C言語を復習しよう

Page 22: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造 リスト構造:

– ノード内に,データ部と次のノードへの参照(ポインタ)を持つデータ構造

Bob 102

Linda294

Mike105

John44

next next next next=null

394670

3946a8

name(char型ポインタ)

394678

102

point (int型変数)

394682

394684

next(member型ポインタ)

394684

3946c8

394688

102

3946a2

abff60

3946a8

Bob

3946c8

Linda

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

Member(member型変数)

Member(member型変数)

abff60

1266fa

12

name(char型ポインタ)

M22

Page 23: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:構造体を宣言

typedef struct Member{char *name;int point;struct Member *next;

} member;

member型変数

???

???

name(char型ポインタ)

???

???

point(int型変数)

???

???

next(member型ポインタ)

Member型構造体

23

Page 24: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:最初のノード(=ルート)を作成

– member型ポインタroot:先頭ノードのアドレスを記憶(始めはNULL)

root(member型ポインタ)

394670

???NULL

24

Page 25: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:最初のノード(=ルート)を作成

– 関数addMemberを実行(リスト先頭のnameとpointを引数とする)

関数addMember (Bob, 102)

root(member型ポインタ)

394670

NULLリスト先頭のpoint

リスト先頭のname

25

Page 26: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:最初のノード(=ルート)を作成

– member型ポインタcurMemberを宣言→rootの内容(NULL)をコピー

curMember(member型ポインタ)

関数addMember (Bob, 102)

root(member型ポインタ)

394670

NULL

abff60

???NULL

リスト先頭のpointリスト先頭のname

26

Page 27: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:最初のノード(=ルート)を作成

– member型ポインタnewMemberを宣言

curMember(member型ポインタ)

関数addMember (Bob, 102)

root(member型ポインタ)

394670

NULL

abff60

???NULL

newMember(member型ポインタ)

abff61

???

27

Page 28: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:最初のノード(=ルート)を作成

– 関数createMemberを実行(リスト先頭のnameとpointを引数とする)

curMember(member型ポインタ)

関数addMember (Bob, 102)

root(member型ポインタ)

394670

NULL

abff60

???NULL

関数createMember (Bob, 102)newMember

(member型ポインタ)

abff61

???

28

Page 29: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:最初のノード(=ルート)を作成

– member型ポインタnewMemberを宣言→ メモリ領域を確保

curMember(member型ポインタ)

関数addMember (Bob, 102)

root(member型ポインタ)

394670

NULL

abff60

???NULL

newMember(member型ポインタ)

abff61

???

関数createMember (Bob, 102)newMember

(member型ポインタ)

12ff6a

???

Member型構造体

13af61

???13af62

???13af63

???

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

13af61

29

Page 30: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:最初のノード(=ルート)を作成

– nameと pointに引数, nextにNULLをコピー

curMember(member型ポインタ)

関数addMember (Bob, 102)

root(member型ポインタ)

394670

NULL

abff60

???NULL

newMember(member型ポインタ)

abff61

???

関数createMember (Bob, 102)newMember

(member型ポインタ)

12ff6a

???

Member型構造体

13af61 13af62 13af63

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

13af61??? ??? ???Bob 102 NULL

30

Page 31: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:最初のノード(=ルート)を作成

– 関数createMemberのnewMemberの内容を、関数addMemberのnewMemberにコピー(関数createMemberの処理終了)

curMember(member型ポインタ)

関数addMember (Bob, 102)

root(member型ポインタ)

394670

NULL

abff60

???NULL

newMember(member型ポインタ)

関数createMember (Bob, 102)newMember

(member型ポインタ)

12ff6a

13af61

Member型構造体

13af61

Bob13af62

10213af63NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

13af61

abff61

???13af61

create!

31

Page 32: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:最初のノード(=ルート)を作成

– curMemberがNULLの場合・・・

curMember(member型ポインタ)

関数addMember (Bob, 102)

root(member型ポインタ)

394670

NULL

NULLNULL

newMember(member型ポインタ)

abff61

13af61

関数createMember (Bob, 102)newMember

(member型ポインタ)

12ff6a

???

Member型構造体

13af61

Bob13af62

10213af63NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

13af61

abff60

32

Page 33: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

NULL

4.リスト構造

リスト構造:最初のノード(=ルート)を作成

– curMemberがNULLの場合・・・

– rootにnewMemberの内容をコピー

関数addMemberの処理終了=最初のノード作成完了

curMember(member型ポインタ)

関数addMember (Bob, 102)

root(member型ポインタ)

13af61

abff60

???NULL

newMember(member型ポインタ)

関数createMember (Bob, 102)newMember

(member型ポインタ)

12ff6a

???

Member型構造体

13af61

Bob13af62

10213af63NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

13af61

abff61

394670

13af6113af61

33

Page 34: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:最初のノード(=ルート)を作成

– つまり・・・rootに関数createMemberで作った構造体の情報が格納

curMember(member型ポインタ)

関数addMember (Bob, 102)

root(member型ポインタ)

394670

13af61

abff60

???NULL

newMember(member型ポインタ)

abff61

13af61

関数createMember (Bob, 102)newMember

(member型ポインタ)

12ff6a

???

Member型構造体

13af61

Bob13af62

10213af63NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

13af61

Member型構造体

13af61

Bob13af62

10213af63NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

34

Page 35: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:最初のノード(=ルート)を作成

– つまり・・・rootに関数createMemberで作った構造体の情報が格納

curMember(member型ポインタ)

関数addMember (Bob, 102)

root(member型ポインタ)

394670

13af61

abff60

???NULL

newMember(member型ポインタ)

abff61

13af61

関数createMember (Bob, 102)newMember

(member型ポインタ)

12ff6a

???

Member型構造体

13af61

Bob13af62

10213af63NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

13af61

Member型構造体

13af61

Bob13af62

10213af63NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

add!

35

Page 36: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:2番目のノードを作成

– member型ポインタcurMemberを宣言→rootの内容(NULL)をコピー

curMember(member型ポインタ)

関数addMember (Linda, 294)

root(member型ポインタ)

394670

13af61

abff60

???13af61

newMember(member型ポインタ)

ea9130

43f701

関数createMember (Linda, 294)newMember

(member型ポインタ)

733578

???

Member型構造体

43f701

Linda43f702

29443f703NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

43f701

Member型構造体

13af61

Bob13af62

10213af63NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

36

Page 37: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:2番目のノードを作成

– curMemberのnext(=rootのnext)がNULL?

curMember(member型ポインタ)

関数addMember (Linda, 294)

root(member型ポインタ)

394670

13af61

abff60

???13af61

newMember(member型ポインタ)

ea9130

43f701

関数createMember (Linda, 294)newMember

(member型ポインタ)

733578

???

Member型構造体

43f701

Linda43f702

29443f703NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

43f701

Member型構造体

13af61

Bob13af62

10213af63NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

37

Page 38: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:2番目のノードを作成

– もし、curMemberのnext(=rootのnext)がNULLなら・・・

– curMemberのnextにnewMemberの内容をコピー

curMember(member型ポインタ)

関数addMember (Linda, 294)

root(member型ポインタ)

394670

13af61

abff60

???13af63

newMember(member型ポインタ)

ea9130

43f701

関数createMember (Linda, 294)newMember

(member型ポインタ)

733578

???

Member型構造体

43f701

Linda43f702

29443f703NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

43f701

Member型構造体

13af61

Bob

13af62

102

13af63

NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

43f701

38

Page 39: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:2番目のノードを作成

– つまり・・・関数createMemberで作った新しい構造体がrootに接続

curMember(member型ポインタ)

関数addMember (Linda, 294)

root(member型ポインタ)

394670

13af61

abff60

???NULL

newMember(member型ポインタ)

ea9130

43f701

関数createMember (Linda, 294)newMember

(member型ポインタ)

733578

???

Member型構造体

43f701

Linda43f702

29443f703NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

43f701

Member型構造体

13af61

Bob

13af62

102

13af63

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

Member型構造体

43f701

Linda43f702

29443f703NULL

point(int型変数)

next(member型ポインタ)

name(char型ポインタ)

43f701

39

Page 40: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:2番目のノードを作成

– つまり・・・関数createMemberで作った新しい構造体がrootに接続

curMember(member型ポインタ)

関数addMember (Linda, 294)

root(member型ポインタ)

394670

13af61

abff60

???NULL

newMember(member型ポインタ)

ea9130

43f701

関数createMember (Linda, 294)newMember

(member型ポインタ)

733578

???

Member型構造体

43f701

Linda43f702

29443f703NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

43f701

Member型構造体

13af61

Bob

13af62

102

13af63

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

Member型構造体

43f701

Linda43f702

29443f703NULL

point(int型変数)

next(member型ポインタ)

name(char型ポインタ)

43f70143f701

add!

40

Page 41: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:3番目以降のノードを作成

– curMemberのnext(=rootのnext)がNULL?– nextがNULLになるまでcurMembeを更新

curMember(member型ポインタ)

関数addMember (Mike, 105)

root(member型ポインタ)

394670

13af61

abff60

???13af61

newMember(member型ポインタ)

Member型構造体

13af61

Bob

13af62

102

13af63

43f701

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

Member型構造体

43f701

Linda43f702

29443f703NULL

point(int型変数)

next(member型ポインタ)

name(char型ポインタ)

132910

3dfd00

関数createMember (Mike, 105)newMember

(member型ポインタ)

453578

???

Member型構造体

3dfd00

Mike3dfd01

1053dfd02NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

3dfd00

create!nextがNULLじゃない!

41

Page 42: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:3番目以降のノードを作成

– curMemberのnext(=rootのnext)がNULL?– nextがNULLになるまでcurMembeを更新

curMember(member型ポインタ)

関数addMember (Mike, 105)

root(member型ポインタ)

394670

13af61

abff60

???13af61

newMember(member型ポインタ)

Member型構造体

13af61

Bob

13af62

102

13af63

43f701

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

Member型構造体

43f701

Linda43f702

29443f703NULL

point(int型変数)

next(member型ポインタ)

name(char型ポインタ)

nextの内容をコピー

43f701

132910

3dfd00

関数createMember (Mike, 105)newMember

(member型ポインタ)

453578

???

Member型構造体

3dfd00

Mike3dfd01

1053dfd02NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

3dfd00

42

Page 43: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:3番目以降のノードを作成

– curMemberのnext(=rootのnext)がNULL?– nextがNULLになるまでcurMembeを更新

curMember(member型ポインタ)

関数addMember (Mike, 105)

root(member型ポインタ)

394670

13af61

abff60

newMember(member型ポインタ)

132910

3dfd00

関数createMember (Mike, 105)newMember

(member型ポインタ)

453578

???

Member型構造体

3dfd00

Mike3dfd01

1053dfd02NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

3dfd00

Member型構造体

13af61

Bob

13af62

102

13af63

43f701

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

Member型構造体

43f701

Linda43f702

29443f703NULL

point(int型変数)

next(member型ポインタ)

name(char型ポインタ)

nextの内容がNULL!!

43f701

43

Page 44: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:3番目以降のノードを作成

– curMemberのnextにnewMemberの内容をコピー

curMember(member型ポインタ)

関数addMember (Mike, 105)

root(member型ポインタ)

394670

13af61

abff60

newMember(member型ポインタ)

132910

3dfd00

関数createMember (Mike, 105)newMember

(member型ポインタ)

453578

???

Member型構造体

3dfd00

Mike3dfd01

1053dfd02NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

3dfd00

Member型構造体

13af61

Bob

13af62

102

13af63

43f701

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

Member型構造体

43f701

Linda43f702

29443f703NULL

point(int型変数)

next(member型ポインタ)

name(char型ポインタ)

43f701

3dfd00

44

Page 45: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:3番目以降のノードを作成

– つまり・・・関数createMemberで作った新しい構造体がリストの最後に接続

curMember(member型ポインタ)

関数addMember (Mike, 105)

root(member型ポインタ)

394670

13af61

abff60

???13af61

newMember(member型ポインタ)

132910

3dfd00

関数createMember (Mike, 105)newMember

(member型ポインタ)

453578

???

Member型構造体

3dfd00

Mike3dfd01

1053dfd02NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

3dfd00

Member型構造体

13af61

Bob

13af62

102

13af63

43f701

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

Member型構造体

43f701

Linda43f702

29443f703NULL

point(int型変数)

next(member型ポインタ)

name(char型ポインタ)

43f701

3dfd00

Member型構造体

3dfd00

Mike3dfd01

1053dfd02NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

45

Page 46: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:3番目以降のノードを作成

– つまり・・・関数createMemberで作った新しい構造体がリストの最後に接続

curMember(member型ポインタ)

関数addMember (Mike, 105)

root(member型ポインタ)

394670

13af61

abff60

???13af61

newMember(member型ポインタ)

132910

3dfd00

関数createMember (Mike, 105)newMember

(member型ポインタ)

453578

???

Member型構造体

3dfd00

Mike3dfd01

1053dfd02NULL

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

3dfd00

Member型構造体

13af61

Bob

13af62

102

13af63

43f701

name(char型ポインタ)

point(int型変数)

next(member型ポインタ)

Member型構造体

43f701

Linda43f702

29443f7033dfd00

point(int型変数)

next(member型ポインタ)

name(char型ポインタ)

43f701

3dfd00

3dfd

Mik

nam(char型ポ

add!

46

Page 47: exp2-02 intro.ppt [互換モード] - Kagoshima U · – 本1冊分のサンプルプログラムを打ち込んでみるべし. – いろいろなコンパイルエラーに遭遇しよう.

4.リスト構造

リスト構造:ノードを消すとき

– prevMember->next = curMember->next

name:Lindapoint:294

next:NULLnext:ノード3のアドレス

name:Bobpoint:102next:ノード2の

アドレス

name:Mikepoint:105

next:NULL

ノード2のアドレス

curMemberノード1のアドレス

prevMember

ノード2ノード1 ノード3

next:ノード3のアドレス

47