王道数据结构上查找一章有散列表的相关介绍,却没有提供对应代码,但是做题时有些题用散列表会很方便,在此提供散列表相关代码。
开放地址法几乎不会用到,它丧失了散列表最常大的优势,即通过散列函数寻找关键字位置,所以下面提供的是拉链法相关代码
数据结构
typedef struct LNode//链表节点
{
ElemType data;
struct LNode *next;
}LNode;
typedef struct HashTable//散列表
{
LNode *TheList[MaxSize];//指向LNode节点的指针数组
int TableSize;
}HashTable;
算法代码
void InitHash(HashTable *H, SeqList *L)
{
int p = L->len;
for (int i = 0; i < p; i++)
H->TheList[i] = NULL;
for (int i = 0, j; i < L->len; i++)
{
LNode *S;
j = L->data[i] % p; //j为元素对应的散列表数组单元
S = (LNode*)malloc(sizeof(LNode)); //创建同义词节点
S->data = i; //节点存储关键字下标
S->next = H->TheList[j]; //H->TheList[]相当于同义字链表的头指针
H->TheList[j] = S; //没有头节点的头插法
}
H->TableSize = p;
}
int Search_Hash