散列存储与冲突处理
怎样将录入的学生学号按散列存储,并用拉链法解决冲突呢?
就开散列的方法啊.你先定义一个散列表的结点结构,
每个结构中含有一个指针域,指向发生冲突的元素的链表,你可以参照我的开散列存储结构的定义来写程序:
/////////////////////////////////////////////////////////////
//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类模板声明结束