Code: C++
#ifndef CONTAINERIMPL_H
#define CONTAINERIMPL_H
#include <iostream>
#include "Container.h"
class ContainerImpl : public Container {
class Node {
public:
Key key;
Node * left;
Node * right;
Node( const Key& key, Node * left = 0, Node * right = 0 ) : key( key ), left( left ), right( right ) {}
};
Node * root;
void add_( Node*& node, const Key& key );
bool isMember_( Node* node, const Key& key ) const;
std::ostream& put_( Node* node, std::ostream& o ) const;
virtual std::ostream& put( std::ostream& o ) const { return put_( root, o ); }
public:
ContainerImpl() : root( 0 ) { }
virtual ~ContainerImpl( ) { } // not implemented
using Container::add;
virtual void add( const Key keys[], size_t size );
using Container::remove;
virtual void remove( const Key keys[], size_t size ) { } // not implemented
virtual bool isMember( const Key& key ) const { return isMember_( root, key ); }
virtual size_t size( ) const { return 0; } // not implemented
virtual bool isEmpty( ) const { return false; } // not implemented
virtual void foreach( const Functor& f, Order order = dontcare ) const { } // not implemented
virtual Key minKey( ) const { return Key(); } // not implemented
virtual Key maxKey( ) const { return Key(); } // not implemented
virtual int teamNr( ) const { return 0; }
virtual int themeNr( ) const { return 0; }
};
#endif //CONTAINERIMPL_H
with
Code: C++
#include <iostream>
#include "ContainerImpl.h"
void ContainerImpl::add_( Node*& node, const Key& key ) {
if (!node) {
node = new Node( key );
} else {
if (node->key > key) {
add_( node->left, key );
} else if (key > node->key) {
add_( node->right, key );
}
}
}
void ContainerImpl::add( const Key keys[], size_t size ) {
for (size_t i = 0; i < size; ++i) {
add_( root, keys[i] );
}
}
bool ContainerImpl::isMember_( Node* node, const Key& key ) const {
if (!node) {
return false;
} else if (key == node->key) {
return true;
} else if (node->key > key) {
return isMember_( node->left, key );
} else {
return isMember_( node->right, key );
}
}
std::ostream& ContainerImpl::put_( Node* node, std::ostream &o ) const {
if (node) {
o << " (";
o << node->key;
put_( node->left, o );
put_( node->right, o );
o << ')';
} else {
o << " .";
}
return o;
}
convert into linear hashing with insert and search function.
Also, I have to use
Code:
* Defaultkonstruktor ContainerImpl()
* void add( const Key[], size_t )
* void add( const Key& )
* bool isMember( const Key& ) const
* int teamNr( ) const
* int themeNr( ) const
