Listing 1: Classes SLPosition and SkipList
#include <stdlib.h>
#include <assert.h>
const int SLMAX_LEVEL = 15;
template <class DATA, class KEY>
class Skiplist; // forward declaration for friend statement
template <class DATA, class KEY>
class SLPosition
{
DATA *data;
KEY key;
SLPosition<DATA,KEY> **forward;
public:
SLPosition( int level );
SLPosition( int level, DATA *cdata, const KEY &ckey );
~SLPosition()
{
// note that we don't delete data as we can't tell who else
// might have a pointer to it
delete [] forward;
}
friend class Skiplist<DATA,KEY>;
};
template <class DATA, class KEY>
class Skiplist
{
SLPosition<DATA,KEY> head;
int level; // the number of lists in the skiplist
int rand_level();
public:
Skiplist();
void insert( DATA *data, const KEY &key );
DATA * remove( const KEY &key );
DATA * find( const KEY &key );
};
/* End of File */