課題3(5/19出題)


課題


ヒント

Exercise 3.2 - 3.4 は配布プログラムの中の SLList.h に手を加えて回答すること が前提になっています.それぞれの練習問題をチェックするプログラムの例をあげ ます. Exercise 3.2 はメンバー変数 n を使わないことが条件になっています.この条件 定義をを満たさない誤った回答の例を示します(SLList.hのSLListの定義の中に,secondLastの定義を加える).
	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()を返す. 参考のために,変数tailも変数nも使わないlast()の定義を示します.
        T last() {
          if(n==0) return null;
          Node * u = head;
          while(u->next !=NULL) u = u->next;
          return u->x;
        }
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/19出題)」(5/19の講義時間中に公開される予定)に提出してください.

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


オプション課題

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