第9回 リスト操作2(6月10日)

今日の課題

■ カーソル版 線型リスト

線型リストを配列変数で実現する方法。

メリットは、「メモリ確保の時間がかからない」、「メモリ使用量が明確」である。

デメリットは、「データ数の上限を動的に変更できない」である。

ヘッダファイル cursorlist.h   ソースファイル cursorlist.c

■ データ構造

ノード

リスト

初期状態

初期状態

格納部分と空き部分の様子

push状態

配列の様子

■ 表示のアルゴリズム

  1. インデックスを head の指すノードとする。
  2. インデックスが終端(EOL)を指さない限り以下を実行する。
  3. インデックスの指すノードのデータを表示する。
  4. インデックスの指すノードの次のノードにインデックスを移す。

■ push アルゴリズム

  1. free から空きノードを得る。(free の指す所が変わる)
  2. head の先頭に空きノードを付ける。

pushの様子

■ remove アルゴリズム

  1. 先頭を除去する場合

    removeの様子

  2. 途中を除去する場合

    removeの様子

■ Makefile

分割コンパイルでは、コマンドライン上での操作が多い。操作内容は Makefile に定義し、make コマンドで起動する。 Makefile

CC = gcc

cursorlist.o:	cursorlist.c	cursorlist.h
	$(CC) -c cursorlist.c

list0901:	list0901.c cursorlist.o cursorlist.h
	$(CC) -o list0901 list0901.c cursorlist.o

list0902:	???
	????

list0903:	???
	????

clean:
	$(RM) *.o list0901 list0902 list0903
使い方 (Makefile、list0901.c、cursorlist.c、cursorlist.h を揃えて下さい)
% make list0901
コンパイル実行
以上

□ 課題1

list0901.c の実行結果をプリントアウトし、動作の説明を書き込め。 ⇒ list0901.c

□ 課題2

list0902.c、および、list0903.c は、リストのデータをセーブしたりロードしたりする。セーブファイルはtmp1である。Makefile を完成させて、動作を確認せよ。

⇒ list0902.c

⇒ list0903.c

■ 宿題

課題1の説明付き実行結果、および、課題2のコンパイルに使った Makefile を提出せよ。


2004.5.30 by tokuhisa