第五回課題


以下の問題を解き、解答をレポート用紙に記述して提出せよ。

[注意] 締め切り
次回の授業のはじめに提出

1.テンプレート

関連→第五回-01

第二回-03 に登場した「コンストラクタつきの stack」は char 型を格納するものであったが、
テンプレートを利用することで、任意の型を格納できるように変更せよ。

なお、利用部 (main 関数) は以下のものを利用せよ。

int main(){

  cout << "***** stack の char での利用 *****\n";

  stack<char> s1;

  s1.push('t');
  s1.push('s');
  s1.push('e');
  s1.push('T');

  for(int i=0; i<4; i++) cout << "s1をポップする: " << s1.pop() << "\n";

  cout << "***** stack の int での利用 *****\n";

  stack<int> s2;

  s2.push(3);
  s2.push(2);
  s2.push(1);
  s2.push(0);

  for(int i=0; i<4; i++) cout << "s2をポップする: " << s2.pop() << "\n";

  return 0;
}



2.list を用いた queue クラス

関連→第五回-03

リスト構造を用いて、前回の課題で触れた queue クラスを作成してみよ。
なお、以下の枠組みに沿って記述すること。
下の枠組みには、第五回-03に登場した node クラスと list クラスの定義を挿入するのであるが、 list クラスの機能が足りなければ、自分で追加せよ。

#include <iostream>
using namespace std;

// () ここに node クラスと list クラスの定義を挿入

class queue{

  list l;

  public:

    void push(int i);
    int pop();

};

void queue::push(int i){

// () 記述

}

int queue::pop(){

// () 記述

}


int main(){

  queue q;

  for(int i=0 ; i<10 ; i++){
    q.push(i);
  }

  for(int i=0 ; i<10 ; i++){
    cout << q.pop() << "\n";
  }

  return(0);
}



なお、この queue クラスは int 型のデータを格納するものであるが、1番のようにテンプレートクラスにすれば、
任意の型が格納できて、汎用性が高まる。興味のある人はやってみるとよい。(ただし、課題にはしないので、余力のない人は実行しなくて構わない)

3.二分木 (BTree) クラスの完成

関連→第五回-05

配布した二分木 (BTree) クラスには、空欄が二箇所ある (「注」で BTree.cpp を検索すれば見つかる)。
これを埋めて二分木を完成させよ。

完成すると、ビルドした時の表示は以下のようになるだろう。

----data access with the iterator
1 D
2 A
4 F
5 B
8 A
9 C
----data access with the key
key=5, data=B
----used as a Priority Queue
D
A
F
B
A
C



4.

質問、要望などがあれば書く。(ここは成績評価対象にはならない)




←第五回-05 : 二分木の実装と利用第五回課題解答→

第五回トップページへ

クラスから入る C++ へ戻る