Exercise 3.4 は "should not use any secondary data structures, and should not create any new nodes." という条件を満たす必要がありますが,report3.tgzの中に含まれるSLList.hの中からincludeされているex3_4.hは,
void reverse(){
if (head == NULL) return;
std::vector temp;
Node* u = head;
while (u != NULL){
Node* next = u->next;
temp.push_back(new Node(u->x));
delete u;
u = next;
}
for (size_t i = 0; i < temp.size() - 1; i++) {
temp[i + 1]->next = temp[i];
}
head = temp[temp.size() - 1];
tail = temp[0];
} //Ex3_4
のように,この条件を満たしていませんが(temp というsecondary data structureを使っている,new Nodeのところで,create new nodesを実行している),動くことは動きます.
動作チェックをおこなうプログラム check_ex3_4.cppを
g++ --std=c++11 -Wall -O2 -o check_ex3_4 check_ex3_4.cppでコンパイルし.
./check_ex3_3で実行してOKが出ることで,このex3_4.hが正しく動作することを確認できます.誤ったプログラムを実行すると,間違いを検出できることもありますが,segmentation faultになることもあります.
report3.tgzの中に含まれるDLList.hの中からincludeされているex3_7.hは,
bool isPalindrome() {
std::vector v;
Node *node = dummy.next;
while (node != &dummy) {
v.push_back(node->x);
node = node->next;
}
return v == std::vector(v.rbegin(), v.rend());
}
のように,一度 vectorに変換してから,palindromeかどうかをチェックするプログラムで,これ自体も解の要件は満たしていますが,補助的なデータ構造を使わずに解答することを期待しています.
動作チェックをおこなうプログラム check_ex3_7.cppを
g++ --std=c++11 -Wall -O2 -o check_ex3_7 check_ex3_7.cppでコンパイルし.
./check_ex3_7で実行してOKが出ることで,このex3_7.hが正しく動作することを確認できます.誤ったプログラムを実行すると,間違いを検出できることもありますが,segmentation faultになることもあります.
report3.tgzの中に含まれるDLList.hの中からincludeされているex3_12.hは,
void reverse() {
std::vector v;
while (size() > 0) {
v.push_back(remove(0));
}
for (T x : v) {
add(0, x);
}
}
のように,一度 vectorに変換してから,逆順になるようにaddするプログラムで,これ自体も解の要件は満たしていますが,補助的なデータ構造を使わずに解答することを期待します.
動作チェックをおこなうプログラム check_ex3_12.cppを
g++ --std=c++11 -Wall -O2 -o check_ex3_12 check_ex3_12.cppでコンパイルし.
./check_ex3_12で実行してOKが出ることで,このex3_12.hが正しく動作することを確認できます.誤ったプログラムを実行すると,間違いを検出できることもありますが,segmentation faultになることもあります.
締切は,6/12(日) 23:59です.締切を過ぎても2022年7月末までは6割を上限に採点します.