アルゴリズムとデータ構造1 2005年6月17日 酒居敬一([email protected]) http://www.info.kochi-tech.ac.jp/k1sakai/Lecture/ALG/2005/index.html 配列 • 添え字とデータが1対1で対応 • 添え字は連続 1 2 – 添え字が1から始まるとは限らない 3 • データの挿入や削除は面倒 4 … … 添え字を用いてアクセスする(例では3) n 図2.1.1 教科書28ページ データ数nの配列 二次元配列 • 行と列それぞれをインデックスで指し示す 1 3 ・ ・ ・ ・ ・・・ m ・・・・・・・ 2 4 3 ・・・・・・・ 1 (3,2) 添え字を 用いて データに アクセス 2 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・・・・・・・・・・・・・・・・・ 図2.1.2 教科書29ページ 2次元配列 三次元配列 1 2 3 ・・・・ ・・・・・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・・・・・・・・・ 1 2 3 ・ ・ ・ k ・ ・ ・ ・ ・ ・ ・ ・ ・ m ・ ・ ・ ・ ・ ・ ・ ・ ・ (3,1,1) 添え字を 用いて データに アクセス 図2.1.3 教科書29ページ 3次元配列 配列上の探索 添え字を用いて 直接アクセス 先頭から 順に調べる 直接探索 線形探索 配列上の探索 半分ずつ調べます 1)半分に分ける 2)前半に存在するか調べる 前半にあれば前半について探索 後半にあれば後半について探索 ※探索のためにデータの整列が必要 二分探索 配列へデータの挿入 P-1 P-1 p p P+1 p番目にデータを挿入 P+1 P+2 P+2 P+3 P+3 ・ ・ ・ ・ 隙間を空けて 突っ込みます ・ ・ ・ ・ n n n+1 n+1 配列からデータの削除 P-1 P-1 p p p番目の データを削除 P+1 P+1 P+2 P+2 P+3 P+3 ・ ・ ・ ・ n n+1 ・ ・ ・ ・ 削除してできた 隙間を詰めます n n+1 メモリと配列 • 計算機のメモリは一種の配列である – プロセッサの命令が扱える単位を要素としている • byte, word, dwordのような整数 • float, double, long doubleのような不動小数点数 • qword, dqwordのようなショートベクタ整数 • プログラミング言語による多彩な要素をもつ配列 – プログラミング言語のコンパイラが変換してくれます • 気にしなくてもいいんですが、場合によります… 補足説明 • Javaにはポインタが陽に説明されていない… – 「~への参照」という形でポインタの存在が見える – NullPointerExceptionでも存在がわかる 配列オブジェクト変数 [実はポインタ変数] 配列オブジェクト変数 [実はポインタ変数] 配列オブジェクト変数 [実はポインタ変数] 配列オブジェクト変数 length: 配列の大きさ length: 配列の大きさ 配列本体へのポインタ length: 配列の大きさ 配列本体へのポインタ length: 配列の大きさ 配列オブジェクト 配列本体へのポインタ 配列本体へのポインタ 配列オブジェクト 配列オブジェクト 配列本体 [メモリ上の領域] 配列本体 [メモリ上の領域] 配列本体 [メモリ上の領域] 配列本体 連結リスト • データをそれぞれの要素に格納 • 要素どおし、つながってリストを形成 先頭 データ データ データ 次 次 次 データを動かすことなく、要素の挿入・削除ができる 連結リスト操作(挿入) 先頭 データ データ データ 次 次 次 データ 次 図2.4.1・2.4.2 教科書41・42ページ 単純な連結リスト(線形リスト)データ挿入 連結リスト操作(削除) 先頭 データ データ データ 次 次 次 図2.4.3 教科書43ページ 単純な連結リスト(線形リスト)データ削除 双方向連結リスト • 連結リストを双方にリンクしたもの データ データ データ 先頭 次 次 次 最後 前 前 前 両方向から探索できる 双方向連結リスト(挿入) データ データ データ 先頭 次 次 次 最後 前 前 前 データ 次 前 図2.4.4・2.4.5 教科書44ページ 双方向連結リスト データ挿入 双方向連結リスト操作(削除) データ データ データ 先頭 次 次 次 最後 前 前 前 図2.4.6 教科書45ページ 双方向連結リスト データ削除 スタック(LIFO) プッシュ ポップ スタックポインタ スタックポインタ 図2.2.1・2.2.2・2.2.3 教科書35・36・37ページ スタック構造(プッシュ・ポップ) 待ち行列(FIFO) データ挿入 データ取得 図2.3.1・2.3.2・2.3.3 教科書38・39ページ 待ち行列(データの挿入・取得)
© Copyright 2024 ExpyDoc