課題3(5/27出題)


課題


ヒント

Exercise 3.2 - 3.4 は配布プログラムの中の SLList.h に手を加えて回答すること が前提になっています.それぞれの練習問題をチェックするプログラムの例をあげ ます. Exercise 3.2 はメンバー変数 n を使わないことが条件になっています.この条件 を満たさない誤った回答の例を示します(SLList.hのSLListの定義の中に,行頭に 「+」がついている行を「+を取り去って」加える).
	T peek() {
		return head->x;
	}

+        T secondLast() {
+          Node *u = head;
+          for (int i = 0; i < n - 2; i++) u = u->next;
+          return u->x;
+        }
+
	bool add(T x) {

(注) 要素数が0又は1の時にsecondLast()がどのような挙動を示すべきかは問題 には書かれていない.ここでは, エラーチェックを行っていないので,要素数 が0の時は,実行時にはSegmentation faultのようなエラーが発生する可能性が あり,要素数が1の時はsecondLast() ではなくlast()を返す. Exercise 3.3はSLList.hのSLListの定義の中に,以下の行を入れてから「ここ を埋める」のところにコードを書いて完成させる.
        T get(int i) {
// ここを埋める
        }
        T set(int i, T x){
// ここを埋める
        }
        void add(int i, T x){
// ここを埋める
        }
        T remove(int i){
// ここを埋める
        }
Exercise 3.4はSLList.hのSLListの定義の中に,以下の行を入れてから「ここ を埋める」のところにコードを書いて完成させる.
        void reverse() {
// ここを埋める
        }

なお,スライドに書いたように,SLList.hは
		Node(T x0) {
			x = 0;
			next = NULL;
		}
		Node(T x0) {
			x = x0;
			next = NULL;
		}
と修正する必要がある.

提出方法

作成したすべてのプログラムと,各プログラムに関する簡単な説明をまとめた プレインテキスト形式(テキストエディタで編集可能な形式)またはPDF形式の ファイルを1つ作成して,ITC-LMSの「課題3(5/27出題)」(5/27の講義時間中に公開される予定)に提出してください.

締切は,6/6(金) 23:59.締切を過ぎても2014年7月末までは6割を上限に採点する.


オプション課題

課題だけで物足りない人は,以下のオプション課題にも取り組んでください.