再发开散列实现的散列表的实现代码.(oop)
这个并不难写,因为存储结构很像图的邻接表,写得算法成员函数也不多,大家可以补充的:
#ifndef OPEN_HASHTABLE_H
#define OPEN_HASHTABLE_H
#include<iostream.h>
#include<stdlib.h>
#define DefaultSize 100
/////////////////////////////////////////////////////////////
//HashNode结构的定义 即开散列表的结点的定义
/////////////////////////////////////////////////////////////
template<class T>
struct HashNode
{
T key; //结点的关键码域
HashNode<T>* link;//结点的指针域
HashNode(T x) //构造函数
{key=x;link=NULL;};
};
/////////////////////////////////////////HashNode结构定义结束
/////////////////////////////////////////////////////////////
//OpenHashTable类模板的实现
//即以开散列的方式实现的哈希表
/////////////////////////////////////////////////////////////
template<class T>
class OpenHashTable
{
private:
int divisor; //除数(必须是质数)
int TableSize; //表的大小
HashNode<T>** ht; //开散列表,即同义词链表的首指针的定义
public:
OpenHashTable(int div,int sz); //构造函数
~OpenHashTable(); //析构函数
HashNode<T>* FindPos(T x)const; //找指定关键码的结点的指针
bool Insert(const T x); //把关键码为x的结点插入到开散列表中
bool Remove(const T x); //删除指定关键码的结点
//友元重载<<运算符输出开散列表的内容
friend ostream& operator<<(ostream& os,OpenHashTable<T>& OPHT);
};
//////////////////////////////////OpenHashTable类模板声明结束