計算機ソフトウエア

Similar documents
DA02

Microsoft PowerPoint - 6.pptx

Microsoft PowerPoint - 06.pptx

第2回

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

memo

Microsoft Word - 中間試験 その1_解答例.doc

Taro-リストⅠ(公開版).jtd

CプログラミングI

Taro-リストⅢ(公開版).jtd

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

memo

Taro-スタック(公開版).jtd

PowerPoint プレゼンテーション

Microsoft PowerPoint - kougi9.ppt

PowerPoint プレゼンテーション

プログラミングI第10回

始めに, 最下位共通先祖を求めるための関数 LcaDFS( int v ) の処理を記述する. この関数は値を返さない再帰的な void 関数で, 点 v を根とする木 T の部分木を深さ優先探索する. 整数の引数 v は, 木 T の点を示す点番号で, 配列 NodeSpace[ ] へのカーソル

memo

memo

Microsoft PowerPoint - 05.pptx

Microsoft PowerPoint - 11.pptx

PowerPoint Template

alg2015-3r3.ppt

Microsoft PowerPoint - algo ppt [互換モード]

Microsoft PowerPoint - kougi11.ppt

program7app.ppt

( ) ( ) 30 ( ) 27 [1] p LIFO(last in first out, ) (push) (pup) 1

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

Microsoft PowerPoint - lec10.ppt

Microsoft Word - 第5回 基本データ構造2(連結リスト).doc

Microsoft PowerPoint - 10.ppt [互換モード]

論理と計算(2)

Microsoft PowerPoint ppt

Taro-ポインタ変数Ⅰ(公開版).j

Microsoft Word - no205.docx

PowerPoint プレゼンテーション - 物理学情報処理演習

memo

Microsoft PowerPoint - kougi10.ppt

オートマトンと言語

Microsoft PowerPoint ppt

memo

alg2015-6r3.ppt

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

gengo1-11

Microsoft PowerPoint - ca ppt [互換モード]

Microsoft Word - no12.doc

論理と計算(2)

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

alg2015-4r2.ppt

PowerPoint Presentation

memo

PowerPoint Presentation

プログラム言語及び演習Ⅲ

r07.dvi

第12回:木構造

ohp07.dvi

Taro-2分探索木Ⅱ(公開版).jtd

(2) 構造体変数の宣言 文法は次のとおり. struct 構造体タグ名構造体変数名 ; (1) と (2) は同時に行える. struct 構造体タグ名 { データ型変数 1; データ型変数 2;... 構造体変数名 ; 例 : struct STUDENT{ stdata; int id; do

基礎プログラミング2015

ex05_2012.pptx

Microsoft PowerPoint - OS07.pptx

Taro-2分探索木Ⅰ(公開版).jtd

第2回

Microsoft PowerPoint - 12.ppt [互換モード]

第1回 プログラミング演習3 センサーアプリケーション

第 3 回 Java 講座 今回の内容 今週の Java 講座はコレクション 拡張 for 文, ガベージコレクションについて扱う. 今週の Java 講座は一番内容が薄いも のになるだろう. コレクション コレクションとは大きさが決まっていない配列だと考えればよい. コレクションには List 先

JavaプログラミングⅠ

プログラミング入門1

Microsoft PowerPoint ppt

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

演算増幅器

PowerPoint プレゼンテーション

02: 変数と標準入出力

PowerPoint Presentation

Taro-再帰関数Ⅱ(公開版).jtd

人工知能入門

02: 変数と標準入出力

PowerPoint プレゼンテーション

本組よこ/根間:文11-11_P131-158

< F2D837C E95CF CF68A4A94C5816A2E6A>

Microsoft Word - 3new.doc

Microsoft PowerPoint - prog08.ppt

文字列操作と正規表現

Microsoft Word _VBAProg1.docx

Microsoft PowerPoint - 09.pptx

ALG2012-A.ppt

データ構造

Microsoft Word - 13

PowerPoint プレゼンテーション - 物理学情報処理演習

Undestand の解析 Understand の C 言語で抽出できない依存関係について サンプルコードを用いて説明します 確認バージョン Understand 3.0 (Build 640) Understand 3.1 (Build 700) Understand 4.0 (Build 78

Microsoft Word - Cプログラミング演習(10)

4 ソフトウェア工学 Software Engineering 抽象データ型 ABSTRACT DATA TYPE データ抽象 (data abstraction) 目的 : データ構造を ( 実装に依存せずに ) 抽象的に定義 方法 : データにアクセス (read, write) する関数の仕様

概要 プログラミング論 変数のスコープ, 記憶クラス. メモリ動的確保. 変数のスコープ 重要. おそらく簡単. 記憶クラス 自動変数 (auto) と静的変数 (static). スコープほどではないが重要.

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

1. 入力した正の整数を降順に並べ換えて出力するプログラムを作成せよ プログラムは個別にコンパイルし make コマンドで実行すること 入力データは 50 以下とし 以下の数が混在しているとする 16 進数 : 先頭 1 文字が x または X( エックスの小文字か大文字 ) 8 進数 : 先頭 1

Functional Programming

離散数学

概要 プログラミング論 構造体 構造体 複数の変数を組合わせて, ひとまとめにしたもの 簡単 重要 自己参照型, リスト 重要, 難しい S-1 S-2 新しい構造体の宣言 struct 構造体名 { データ型メ

Transcription:

データ構造とプログラミング技法 ( 第 2 回 ) ー線形構造ー

線形構造 用語 : レコード : ひとまとまりのデータ ( 構造体 ) 線形リスト :n 0 個のレコードの1 次元並び 順配置 : 表 リンク配置 : 連鎖リスト

順配置された線形リスト : 表 論理構造 物理構造 a b c d f 要素の 位置 の順序関係を アドレスの値の順序関係で表現する方法 0000 0001 0002 0003 0004 0005 0006 0007 a b c d f

表に対する操作 : 要素の挿入 削除 0000 0001 0002 0003 0004 0005 0006 0007 a b c d f a b c f d 論理構造物理構造 b c f d 0000 0001 0002 0003 0004 0005 0006 b c d f

表に対する操作 : アクセス N 番目の要素 a N 番目の要素のアドレス = 先頭番地 +(N-1) 要素サイズ b N=5 c d f 0004 0000 0001 0002 0003 0004 0005 0006 0007 a b c d f

リンク配置された線形リスト : 連鎖リスト 論理構造 a b c d f 物理構造実際 0000 a 100b 0003 null 0008 c 0032 000d 0106 001a 0003 0032 d 000d 0106 f 001a 100b b 0008 記法 a b c d f

連鎖リストに対する操作 : 要素の挿入 削除 論理構造 物理構造 a b c d f b c d f a b c d f

連鎖リストに対する操作 : 要素の挿入 削除

連鎖リストに対する操作 : アクセス N 番目の要素 N-1 回リンクを辿る a b a b c c d d f N=5 f

連鎖リストの変種

論理構造の表現法 ( 物理構造 ) 論理構造 = 線形リスト 物理構造 = 順配置 ( 表 ) アクセスが早い 追加 削除 などの変更に弱い リンク配置 ( 連鎖リスト ) アクセスが遅い 追加 削除などの変更に適する

スタックと待ち行列 : データ抽象化 データ構造 + 操作手続き例 : スタック待ち行列 PUSH POP Enquu a d c b a b c d Dquu

スタックの操作 ( 表を用いた場合 )

キューの操作 ( 表を用いた場合 )

スタック / キューは何のために用いるか 系統的な記憶と想起のメカニズム スタック (LIFO) 環境の保存と参照ー > 再帰呼び出し 木 グラフの縦型探索 キュー (FIFO) バッファ ( 緩衝用 ) メモリ 装置間の速度差の吸収 木 グラフの横型探索

迷路の探索 : スタックの利用の例 :1

探索木

迷路の探索アルゴリズム

list にスタックを用いた場合

木の縦型探索とスタック

再帰的構造 0, i=0 f(i)= 1, i=1 f(i-1)+f(i-2), i 2 Fibonacci 数 int Fib(int i) { switc(i){ cas 0: rturn(0);brak; cas 1: rturn(1);brak; dfault: rturn(fib(i-1)+fib(i-2));

再帰的構造 int Fib(int i) { switc(i){ cas 0: rturn(0);brak; cas 1: rturn(1);brak; dfault: rturn(fib(i-1)+fib(i-2)); Fib(3) Fib(2)+Fib(1) (Fib(1)+Fib(0))+1 (1+0)+1

再帰的構造 同じ変数名であっても 関数呼び出し の度に 別の記憶領域が確保される ( スタックを利用している ) 変数の内容は 他の関数呼び出しに よって破壊されることはない

Advancd-1Fibonacci 数を再帰呼び出しで 求めるプログラム #includ <stdio.> int fib(int x) { switc(x){ cas 0: rturn 0; brak; cas 1: rturn 1; brak; dfault: rturn fib(x-1)+fib(x-2); int main(int arc, car *arv[]) { int x; wil(--arc){ x=atoi(*++arv); printf("fib %d = %d n",x,fib(x)); rturn 0; 実行例 : %./fib 15 Fib 15 = 610

Advancd-2 環状連鎖リストを使った 電光掲示板風表示ログラム #includ <stdio.> #includ <strin.> #includ <unistd.> //Slf rfrntial structur typ dfinition typdf struct nod{ car c; struct nod *nxt; NODE; NODE *AllocNods(int num) {//Mmory allocation NODE *rt; int i; rt=(node *)malloc(sizof(node) *num ); for (i=0; i<num; i++){ if (i<num-1) (rt+i)->nxt = (rt+i+1); 実行例 : %./link1 Tis is a pn 与えた文字列が横スクロールする ls (rt+i)->nxt = rt;//connct tail to ad rturn rt;

Advancd-2 続き void StCar(NODE *p, car *rf) { wil(*rf){ p->c=*rf; p=p->nxt; rf++; PrintNod(NODE *p,int n) { wil(n--){ printf("%c",p->c); p=p->nxt; fflus(stdout); int main(int arc, car *arv[]) { int ln; car lin[300]; NODE *s; lin[0]=(car)null; wil(--arc){//concatinat ars strcat(lin,*++arv); strcat(lin," "); ln=strln(lin);//strin lnt s=(node *)AllocNods(ln); StCar(s,lin); wil(1){ //Endlss Loop PrintNod(s,ln); putcar (' r'); //Carrid rturn s=s->nxt; uslp(80000);

Advancd -2STACK/QUEUE #includ <stdio.> #includ <stdlib.> //#dfin QUEUE #dfin STACK #dfin SIZ 10 // キュー // スタック /********* キューの定義 **************/ #ifdf QUEUE #dfin Add(Q,x) n_quu(&q,x) #dfin Gt_And_Dlt(Q) d_quu(&q) #dfin Not_Empty(Q) Q.QF!=Q.QR #dfin Init(Q) Q.QF=Q.QR=0 #dfin Stack_or_Quu quu #dfin QUEUE_SIZ SI // キューのサイズ struct Quu { int Buf[QUEUE_SIZ]; int QF; int QR; ; typdf struct Quu quu; /* QUEUE 用 */ void n_quu(); void n_quu(quu * Q, int v) { Q->QR = (Q->QR+1)%QUEUE_SIZ; if (Q->QR == Q->QF) { fprintf(stdrr,"quu Ovrflow n"); xit(1); ls{ Q->Buf[Q->QR] = v; d_quu(quu * Q) { if (Q->QR == Q->QF) { fprintf(stdrr,"quu Undrflow n"); xit(1); ls{ Q->QF = (Q->QF+1)%QUEUE_SIZ; rturn Q->Buf[Q->QF]; #ndif /******** キューの定義終わり *************/

/******** スタックの定義 *****************/ #ifdf STACK #dfin Add(S,x) pus(&s,x) #dfin Gt_And_Dlt(S) pop(&s) #dfin Not_Empty(S) S.SP>0 #dfin Init(S) S.SP=0 #dfin Stack_or_Quu stack #dfin STACK_SIZ SIZ // スタックのサイズ struct Stack { int Buf[STACK_SIZ]; int SP; ; typdf struct Stack stack; void pus(stack* S,int d) { if (S->SP<STACK_SIZ-1) { S->Buf[S->SP++]=d; ls{ fprintf(stdrr,"stack ovrflow. n"); xit(1); pop(stack* S) { if (S->SP > 0) { rturn S->Buf[--(S->SP)]; ls{ fprintf(stdrr,"stack undrflow. n"); xit(1); #ndif /******* スタックの定義終わり ***********/ Advancd -2 続き main() { int i,c; Stack_or_Quu X; Init(X); for (i=0; i< SIZ-1; i++) { c=(int)('a'+i); Add(X,c);putcar(c); putcar(' n'); wil(not_empty(x)) putcar(gt_and_dlt(x)); putcar(' n'); 実行例 : % stack-quu ABCDEFGHI IHGFEDCBA