Presentation is loading. Please wait.

Presentation is loading. Please wait.

INSERT(x,p,L)の例 (一部) 磯 直行 2009年5月5日

Similar presentations


Presentation on theme: "INSERT(x,p,L)の例 (一部) 磯 直行 2009年5月5日"— Presentation transcript:

1 INSERT(x,p,L)の例 (一部) 磯 直行 2009年5月5日
ポインタを使った 連結リストの動作 INSERT(x,p,L)の例 (一部) 磯 直行 2009年5月5日

2 連結リストによる INSERT(x,p,init)
NULL 30 40 50 x 初期状態 →いまからポインタpが指すセルの次に 変数xの値のセルを追加したい 48

3 連結リストによる INSERT(x,p,init)
NULL 30 40 50 temp x セルのメモリを確保(malloc関数を呼び出す) 型変換してセルを構成して(struct cell *を使う) 一時保存用ポインタtempに保存 48

4 連結リストによる INSERT(x,p,init)
NULL 30 40 50 temp x pが先頭のポインタかどうかを調べる →ここではinit≠pとして話を進めるが, init=pの場合は各自考えよ 48

5 連結リストによる INSERT(x,p,init)
NULL 30 40 50 temp x pが指すセルの次のポインタを tempが指すセルの次のポインタへ代入 →ポインタtempが指すセルの次のセルが同じになる 48

6 連結リストによる INSERT(x,p,init)
NULL 30 40 50 temp x pが指すセルの次のポインタを tempが指すセルの次のポインタへ代入 →tempが指すセルとpが指すセルが同じセルを指す 48

7 連結リストによる INSERT(x,p,init)
× NULL 30 40 50 temp x tempをポインタpの次のポインタとして代入 →ポインタpの次のセルが変わり, ポインタpの次のセルはtempになる 48

8 連結リストによる INSERT(x,p,init)
NULL 30 40 50 temp x 48 48 tempが指すセルにxの値を代入

9 連結リストによる INSERT(x,p,init)
48 NULL 30 40 50 temp 完成! (横一列に伸ばしてみればよくわかる!) 先頭のポインタinitは変更がないので INSERT関数はinitを返す x 48 保存されているデータ数に関係なく いつも同じ回数の処理で終わって速いぞ!

10 INSERT(x,p,A)の例 (一部) 磯 直行 2009年5月5日
配列を使った リストの動作 INSERT(x,p,A)の例 (一部) 磯 直行 2009年5月5日

11 配列による INSERT(x,p,A) p n 4 10 0 1 2 3 4 5 6 7 8 9 10 11 A ・・・ x
20 30 40 50 60 70 80 90 x 初期状態(現在のデータ数n=10個) →いまから変数pに保存された番号のセルの次に値xのセルを追加したい 48

12 配列による INSERT(x,p,A) p n temp 4 10 10 0 1 2 3 4 5 6 7 8 9 10 11 A ・・・ x
20 30 40 50 60 70 80 90 x 注目するセルの番号を保存する変数tempへnを代入 (n=temp+1となる場所を探す) 48

13 配列による INSERT(x,p,A) p n temp 4 10 10 0 1 2 3 4 5 6 7 8 9 10 11 A ・・・
20 30 40 50 60 70 80 90 pとtempと比較して配列の最後または途中に追加するのかを判定 →ここではp=temp+1でないので途中に追加するときを考える (最後に追加するのは容易にできる) x 48

14 配列による INSERT(x,p,A) p n temp 4 10 9 0 1 2 3 4 5 6 7 8 9 10 11 A ・・・ x
20 30 40 50 60 70 80 90 x 注目するセルを1つ戻す(tempにtemp-1を代入) 48

15 配列による INSERT(x,p,A) p n temp:いま注目しているセルの番号を 保存している変数 4 10 9 0 1 2 3 4
10 11 A ・・・ 10 20 30 40 50 60 70 80 90 x 保存されている最後のセルを1つ後ろへ代入して空きを1つ作る 48

16 配列による INSERT(x,p,A) p n temp 4 10 9 0 1 2 3 4 5 6 7 8 9 10 11 A ・・・
20 30 40 50 60 70 80 90 pとtempと比較(2回目) →p=temp+1でないので繰り返す x 48

17 配列による INSERT(x,p,A) p n temp 4 10 8 0 1 2 3 4 5 6 7 8 9 10 11 A ・・・ x
20 30 40 50 60 70 80 90 x 注目するセルを1つ戻す(tempにtemp-1を代入)(2回目) 48

18 配列による INSERT(x,p,A) p n temp 4 10 8 0 1 2 3 4 5 6 7 8 9 10 11 A ・・・ x
20 30 40 50 60 70 80 90 x セルを1つ後ろへ代入して空きを1つ移動(3回目) 48

19 配列による INSERT(x,p,A) p n temp 4 10 8 0 1 2 3 4 5 6 7 8 9 10 11 A ・・・
20 30 40 50 60 70 80 90 pとtempと比較(3回目) →p=temp+1でないので繰り返す x 48

20 配列による INSERT(x,p,A) p n temp 4 10 7 0 1 2 3 4 5 6 7 8 9 10 11 A ・・・ x
20 30 40 50 60 70 80 90 x 注目するセルを1つ戻す(tempにtemp-1を代入)(3回目) 48

21 配列による INSERT(x,p,A) p n temp 4 10 7 0 1 2 3 4 5 6 7 8 9 10 11 A ・・・ x
20 30 40 50 60 70 80 90 x セルを1つ後ろへ代入して空きを1つ移動(3回目) 48

22 配列による INSERT(x,p,A) p n temp 4 10 7 0 1 2 3 4 5 6 7 8 9 10 11 A ・・・
20 30 40 50 60 70 80 90 pとtempと比較(4回目) →p=temp+1でないので繰り返す x 48

23 配列による INSERT(x,p,A) p n temp 4 10 6 0 1 2 3 4 5 6 7 8 9 10 11 A ・・・ x
20 30 40 50 60 70 80 90 x 注目するセルを1つ戻す(tempにtemp-1を代入)(4回目) 48

24 配列による INSERT(x,p,A) p n temp 4 10 6 0 1 2 3 4 5 6 7 8 9 10 11 A ・・・ x
20 30 40 50 60 70 80 90 x セルを1つ後ろへ代入して空きを1つ移動(4回目) 48

25 配列による INSERT(x,p,A) p n temp 4 10 6 0 1 2 3 4 5 6 7 8 9 10 11 A ・・・
20 30 40 50 60 70 80 90 pとtempと比較(5回目) →p=temp+1でないので繰り返す x 48

26 配列による INSERT(x,p,A) p n temp 4 10 5 0 1 2 3 4 5 6 7 8 9 10 11 A ・・・ x
20 30 40 50 60 70 80 90 x 注目するセルを1つ戻す(tempにtemp-1を代入)(5回目) 48

27 配列による INSERT(x,p,A) p n temp 4 10 5 0 1 2 3 4 5 6 7 8 9 10 11 A ・・・ x
20 30 40 50 60 70 80 90 x セルを1つ後ろへ代入して空きを1つ移動(5回目) 48

28 配列による INSERT(x,p,A) p n temp 4 10 5 0 1 2 3 4 5 6 7 8 9 10 11 A ・・・
20 30 40 50 60 70 80 90 pとtempと比較(6回目) →p=tempとなり,挿入位置を発見! x 48

29 配列による INSERT(x,p,A) p n temp 4 10 5 0 1 2 3 4 5 6 7 8 9 10 11 A 48 ・・・
20 30 40 50 60 70 80 90 完成! でも,データがたくさんあったら やたら遅いぞ! x 変数xを配列のtempの場所に代入 48

30 パラパラマンガにするには 1.このパワーポイントを印刷するときに次の設定にして印刷せよ. ・「印刷対象」を「配布資料」に設定
・「1ページ当たりのスライド」を6~9に設定 (スライドに枠をつけると良い) 2.枠にそってはさみで切り取る. 3.大型クリップで挟んでパラパラマンガ完成


Download ppt "INSERT(x,p,L)の例 (一部) 磯 直行 2009年5月5日"

Similar presentations


Ads by Google