• 検索結果がありません。

ヒントスライドPPT プログラミング演習2 #prog2bkc net

N/A
N/A
Protected

Academic year: 2018

シェア "ヒントスライドPPT プログラミング演習2 #prog2bkc net"

Copied!
21
0
0

読み込み中.... (全文を見る)

全文

(1)

第 5 週

リスト

(2)

連結リスト

「リスト」ともいう

 ポインタでデータをつなぎあわせたもの

• 各データは構造体で表現

• 構造体のメンバに次のデータへのポインタを含む

 線状リスト ( 線形リスト ) 、循環リストがある

(3)

連結リストの種類

cf. 「データ構造とアルゴリズム」資料

片方向線状リスト

データをポインタで線状につないだもの

各データは、次のデータへのポインタを持つ

( 最後のデータの次は NULL )

top ‘a’ ‘b’ ‘c’

3

(4)

連結リストの長所・短所

長所

データの数が可変

–データが予想より増えても対応可能

–あらかじめ余分にメモリ確保する必要がない

• データの挿入や削除が高速

• ポインタの繋ぎ方を柔軟に変更可能

短所

• データへのアクセスは配列より遅い

• ポインタの分、メモリを余分に使う

(5)

5

必須課題 5-1 (1/3)

printf("%c\n",top->key);

printf("%c\n",top->next->key);

printf("%c\n",top->next->next->key);

top ‘a’ ‘b’ ‘c’

key next key next key next

(6)

必須課題 5-1 (2/3)

printf("%c\n",top->key);

printf("%c\n",top->next->key);

printf("%c\n",top->next->next->key);

top ‘a’ ‘b’ ‘c’

key next key next key next

(7)

7

必須課題 5-1 (3/3)

printf("%c\n",top->key);

printf("%c\n",top->next->key);

printf("%c\n",top->next->next->key);

top ‘a’ ‘b’ ‘c’

key next key next key next

(8)

必須課題 5-1 :参考プログラム(リストの初期化部分のみ

struct data *top=NULL; top =

top->key = ‘a’;

top->next = NULL; top->next =

top->next->key =‘b’;

top->next->next = NULL; top->next->next =

top->next->next->key =‘c’;

top->next->next->next=NULL;

top ‘a’ ‘b’ ‘c’

key next key next key next

動的メモリ確保

動的メモリ確保

動的メモリ確保

構造体 struct data の 動的メモリ確保を行う

必須課題 3-3 を復習しよう

エラー処理も記述が必要

(9)

9

必須課題 5- 2:出力例

リスト版スタックの状態を出力する関数 void print_stack_list(struct data *top)

top

‘g’

‘o’

‘h’

‘e’

e<---TOP g

o h

top ‘e’ ‘g’ ‘o’ ‘h’

必須課題5 -1 とは

TOP の表示位置が違うことに注意

スタックのイメージ

(10)

必須課題 5- 2: print_stack_list

 ループを利用し、出力例以外にも対応できること

• struct data * 型の一時変数(仮に cur とする)を用意する

• 一時変数に先頭( top )を代入する

• 一時変数を、一時変数自体の next で更新しながら、 リストを辿る

例: cur = cur->next ;

• リスト辿りながら、リストの各要素( key )を出力する

• ループの終了判定は next が NULL かどうかで判定する

top ‘e’ ‘g’ ‘o’ ‘h’

(11)

11

必須課題 5- 2: print_stack_list

 ループを利用し、出力例以外にも対応できること

• struct data * 型の一時変数(仮に cur とする)を用意する

• 一時変数に先頭( top )を代入する

• 一時変数を、一時変数自体の next で更新しながら、 リストを辿る

例: cur = cur->next ;

• リスト辿りながら、リストの各要素( key )を出力する

• ループの終了判定は next が NULL かどうかで判定する

top ‘e’ ‘g’ ‘o’ ‘h’

cur

(12)

必須課題 5- 2: print_stack_list

 ループを利用し、出力例以外にも対応できること

• struct data * 型の一時変数(仮に cur とする)を用意する

• 一時変数に先頭( top )を代入する

• 一時変数を、一時変数自体の next で更新しながら、 リストを辿る

例: cur = cur->next ;

• リスト辿りながら、リストの各要素( key )を出力する

• ループの終了判定は next が NULL かどうかで判定する

top ‘e’ ‘g’ ‘o’ ‘h’

cur

(13)

13

必須課題 5- 2: print_stack_list

 ループを利用し、出力例以外にも対応できること

• struct data * 型の一時変数(仮に cur とする)を用意する

• 一時変数に先頭( top )を代入する

• 一時変数を、一時変数自体の next で更新しながら、 リストを辿る

例: cur = cur->next ;

• リスト辿りながら、リストの各要素( key )を出力する

• ループの終了判定は next が NULL かどうかで判定する

top ‘e’ ‘g’ ‘o’ ‘h’

cur

(14)

必須課題 5- 2: print_stack_list

 ループを利用し、出力例以外にも対応できること

• struct data * 型の一時変数(仮に cur とする)を用意する

• 一時変数に先頭( top )を代入する

• 一時変数を、一時変数自体の next で更新しながら、 リストを辿る

例: cur = cur->next ;

• リスト辿りながら、リストの各要素( key )を出力する

• ループの終了判定は next が NULL かどうかで判定する

top ‘e’ ‘g’ ‘o’ ‘h’

cur

(15)

15

必須課題 5- 3 (1/3)

top rear

‘a’ ‘b’ ‘c’

key next key next key next

printf("%c\n",q.top->key);

printf("%c\n",q.top->next->key);

printf("%c\n",q.rear->key);

q

(16)

必須課題 5- 3 (2/3)

printf("%c\n",q.top->key);

printf("%c\n",q.top->next->key);

printf("%c\n",q.rear->key);

top rear

‘a’ ‘b’ ‘c’

key next key next key next

q

(17)

17

必須課題 5- 3 (3/3)

top rear

‘a’ ‘b’ ‘c’

key next key next key next

printf("%c\n",q.top->key);

printf("%c\n",q.top->next->key);

printf("%c\n",q.rear->key);

q

(18)

必須課題 5-3 :参考プログラム(リストの初期化部分のみ)

top rear

‘a’ ‘b’ ‘c’

key next key next key next

q

struct queue q; q.top =

q.top->key = 'a';

q.top->next = NULL;

q.rear = q.top;//rear の更新 q.rear->next =

q.rear = q.rear->next; //rear の更新 q.rear->key ='b';

q.rear->next= NULL; q.rear->next =

q.rear = q.rear->next; q.rear->key ='c';

q.rear->next=NULL;

動的メモリ確保

動的メモリ確保

動的メモリ確保

構造体 struct data の 動的メモリ確保を行う

必須課題 3-3 を復習しよう

エラー処理も記述が必要

(19)

19

必須課題 5- 4:出力例

リスト版キューの状態を出力する関数

void print_queue_list(struct queue q)

‘o’ ‘g’ ‘e’

‘h’ top

rear q

h<---TOP o

g

e<---REAR

必須課題6 -1 とは

REAR の表示位置が違うことに注

(20)

Key

‘a’

アドレス

0xbfffdb50 Key

‘b’

アドレス

0xbfffdb48 Key

‘c’

アドレス NULL

補足:線状リスト

複数のデータをひとまとまりとして扱うデータ構造

配列との違い

型の違うデータを混在させられる ( ただし本演習では同じ型のもののみ扱う )

データが頻繁に追加・削除されるようなプログラムに向いている

物理的に非連続なメモリ領域群にデータを蓄えられる

ある 1 データに対応する要素に,次のデータが存在するメモリ領域の場所が含まれ ている

あるデータには,先頭のデータを順にたどってしかアクセスできない Top

アドレス0xbfffdb50 に存在 する要素

アドレス0xbfffdb48 に存在 する要素

アドレス0xbfffdb40

アドレス0xbfffdb40 に存在 する要素

リストヘッダ リストの一要素

リストの末尾の要素 データ 次要素のアドレス

(21)

著者リスト

21

1. 安積 卓也(情報システム学科)

2. 大森 隆行(情報システム学科)

3. 原田 史子(情報システム学科)

参照

関連したドキュメント

超純水中に濃度及び粒径既知の標準粒子を添加した試料水を用いて、陽極酸 化膜-遠心ろ過による 10 nm-SEM

ƒ ƒ (2) (2) 内在的性質< 内在的性質< KCN KCN である>は、他の である>は、他の

A tendency toward dependence was seen in 15.9% of the total population of students, and was higher for 2nd and 3rd grade junior high school students and among girls. Children with

月額利用料: 200円(税抜)/1アドレス

が有意味どころか真ですらあるとすれば,この命題が言及している当の事物も

成績 在宅高齢者の生活満足度の特徴を検討した結果,身体的健康に関する満足度において顕著

の点を 明 らか にす るに は処 理 後の 細菌 内DNA合... に存 在す る

The effects of heavy metal ion concentrations on the specific growth rate and the specific change rate of viable cell number were clarified, suggesting that the inhibitory effect