#include "sets2.h" #include unsigned long BinTreeNode::counter = 0; Set::Set () { size = 0; } Set::~Set() { } Set& Set::add (int) { cerr << "*** can't add to general sets " << endl; return *this; } bool Set::member (int) const { cerr << "*** can't check membership in general sets " << endl; return false; } Set& Set::clear() { cerr << "*** can't clear general sets " << endl; return *this; } void Set::copyMembers (Set& into) const { cerr << "*** can't copy general sets " << endl; } const Set& Set::operator= (const Set& s) { return *this; } ///////////////////////// BinTreeNode::BinTreeNode (int d) { left = right = 0; data = d; counter++; } BinTreeNode::~BinTreeNode () { --counter; } ////////////////////// TreeSet::TreeSet () { root = 0; } bool insert (PBinTreeNode &t, int x) { if (t == 0) { t = new BinTreeNode(x); return true; } else if (t->data == x) { return false; } else if (x < t->data) return insert (t->left, x); else return insert (t->right, x); } Set& TreeSet::add (int x) { if (insert (root, x)) size++; return *this; } bool TreeSet::member (int x) const { BinTreeNode *t = root; while (t != 0) { if (t->data == x) return true; else if (x < t->data) t = t->left; else t = t->right; } return false; } void deleteAll (PBinTreeNode& t) { if (t != 0) { deleteAll(t->left); deleteAll(t->right); delete t; t = 0; } } Set& TreeSet::clear() { size = 0; deleteAll(root); return *this; } void TreeSet::copyMembers(Set& into) const { /*..to be done ..*/ } // ////////////////////////////////////// ArraySet::ArraySet () { } Set& ArraySet::add (int x) { if (!member(x)) { members[size] = x; size++; } return *this; } bool ArraySet::member (int x) const { for (int i = 0; i < size; i++) if (x == members[i]) return true; return false; } Set& ArraySet::clear() { size = 0; return *this; } void ArraySet::copyMembers(Set& into) const { for (int i=0; i