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

Slides:



Advertisements
Similar presentations
メモリとポインタ. プログラムの前提 コンピュータは、0と1で計算をし、 0と1でデータを保存している。 メモリを学ぶのに必要な知識である。
Advertisements

プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
情報処理演習C2 ファイル操作について (2).
5.データ構造入門 5-1.連結リスト(Linked List) 5-2.スタック(Stack) 5-3.キュー(Queue)
ISD実習E 2009年6月29日 LISPシステム入門 (第5回) 関数ポインタ eval システム関数.
第11回 整列 ~ シェルソート,クイックソート ~
ISD実習E 2009年7月13日 LISPシステム入門 (第6回) 関数の定義 eval load 関数.
データ構造とアルゴリズム 第10回 mallocとfree
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
情報工学概論 (アルゴリズムとデータ構造)
オペレーティングシステムJ/K 2004年11月4日
アルゴリズムとデータ構造 第3回基本的なデータ構造(リスト) 2015/10/28 アルゴリズムとデータ構造 2015.
第8回 プログラミングⅡ 第8回
アルゴリズムとデータ構造 2011年6月13日
第6章 2重ループ&配列 2重ループと配列をやります.
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
データ構造とアルゴリズム 第4回 リスト ~ データ構造(1)~.
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月10日、H.15(‘03)] 今日のメニュー 1 前回の課題の復習
データ構造とアルゴリズム 第5回 スタック ~ データ構造(2)~.
アルゴリズムとデータ構造 第2回 線形リスト(復習その2).
①データ構造 ②アルゴリズム ③プログラム言語 ④マークアップ言語
データ構造と アルゴリズム 第八回 知能情報学部 新田直也.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
第13回 ハッシュテーブルを使ったプログラム ~高速に検索するには?~.
プログラミング論 関数ポインタ と 応用(qsort)
データ構造とアルゴリズム 第4回 リスト ~ データ構造(1)~.
データ構造とアルゴリズム 第5回 スタック ~ データ構造(2)~.
データ構造とアルゴリズム 第6回 キュー ~ データ構造(2)~.
プログラミング 4 記憶の割り付け.
アルゴリズムとデータ構造 補足資料11-1 「mallocとfree」
アルゴリズムとデータ構造 補足資料5-2 「サンプルプログラムsetop.c」
プログラミング入門2 第11回 情報工学科 篠埜 功.
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
第11回 プログラミングⅡ 第11回
第9回 優先度つき待ち行列,ヒープ,二分探索木
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
09: ポインタ・文字列 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
データ構造と アルゴリズム 第五回 知能情報学部 新田直也.
2009/10/23 整列アルゴリズム (1) 第4講: 平成21年10月23日 (金) 4限 E252教室 コンピュータアルゴリズム.
パワーポイントの 作り方&発表方法 渡辺隆行 2003年5月.
6.データ構造入門 6-1.連結リスト(Linked List) 6-2.スタック(Stack) 6-3.キュー(Queue)
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
データ構造とアルゴリズム 第11回 リスト構造(1)
情報数理Ⅱ 第11章 データ構造 平成29年1月18日.
プログラミング 3 2 次元配列.
文字列へのポインタの配列 static char *lines[MAXLINES]; lines[0] NULL
アルゴリズムとデータ構造 2012年7月2日
ポインタとポインタを用いた関数定義.
アルゴリズムとデータ構造 2012年6月11日
アルゴリズムとデータ構造 2011年6月28日
オペレーティングシステムJ/K (管理のためのデータ構造)
09: ポインタ・文字列 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページを開いておく こと
第11回放送授業.
アルゴリズムとデータ構造 2013年7月2日
アルゴリズムとデータ構造1 2009年6月15日
地域情報学 C言語プログラミング 第4回 while文、do~while文、switch文、 2次元配列、ポインタ 2017年11月10日
アルゴリズムとデータ構造 補足資料11-3 「線形リストのオペレータ」
ネットワーク・プログラミング Cプログラミングの基礎.
アルゴリズム入門 (Ver /10/07) ・フローチャートとプログラムの基本構造 ・リスト ・合計の計算
データ構造とアルゴリズム論 第9章 連結リスト
アルゴリズムとデータ構造 2010年6月17日
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
TList リスト構造とは? 複数のデータを扱うために、 データの内容と、次のデータへのポインタを持つ構造体を使う。
Ibaraki Univ. Dept of Electrical & Electronic Eng.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング 3 ポインタ(1).
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

配列による 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

配列による 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

配列による 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

配列による 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

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

配列による 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

配列による 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

配列による 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

配列による 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

配列による 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

配列による 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

配列による 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

配列による 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

配列による 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

配列による 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

配列による 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

配列による 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

配列による 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

配列による 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

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