上一节讲了利用链表来处理冲突的方法——分离链接法。本节讲另一种处理冲突的方法——开放定址法。开放定址法有三种常用的冲突解决方法:线性探测法、平方探测法、双散列。本节实现的是平方探测法
编码测试环境:Visual Studio 2010
hashquard.h函数声明
typedef int ElementType;
#ifndef HASHQUARD_H
#define HASHQUARD_H
typedef unsigned int Index;
typedef Index Position;
//合法、空、删除(懒惰删除)
enum KindOfEntry{ Legitimate, Empty, Deleted };
struct Entry
{
ElementType Element;//关键字
enum KindOfEntry Info;//根据此信息判断是否发生冲突
};
typedef struct Entry Cell;
struct HashTbl
{
int TableSize;//哈希表的大小
Cell *TheCells;//哈希表中的元素
};
typedef struct HashTbl *HashTable;
HashTable InitializeTable(int TableSize);//初始化哈希表
void DestoryTable(HashTable H);//销毁哈希表
Position Find(ElementType Key, HashTable H);//查找
void Insert(ElementType Key, HashTable H);//插入
#endif
hashquard.c函数实现
#include "fatal.h"
#include "hashquar