#include <stdio.h>
#include <windows.h>
int HelpPosition;
int position;
typedef int ElementType;
/* 单链表定义 */
typedef struct Node *PtrToNode;
struct Node
{
ElementType data; //存储数据
int ListPosition; //存储在链表上的第几结点
struct Node *next;
};
typedef PtrToNode List;
/* 哈希表建立 */
typedef struct TblNode *HashTable;
struct TblNode {
static int TableSize; //表的最大长度
List Heads; //指向链表头结点的数组
};
int TblNode::TableSize = 11;
/* 初始化哈希表 */
HashTable CreateTable()
{
HashTable H;
int i;
H = (HashTable)malloc(sizeof(struct TblNode));
H->Heads = (List)malloc(H->TableSize*sizeof(struct Node));
/*初始化表头文件*/
for( i=0; i<H->TableSize;i++)
{
H->Heads[i].next = NULL;
}
return H;
}
/* 找到Key在哈希表的那个位置 并返回结点*/
List Find(HashTable H,ElementType Key)
{
List P;
HelpPosition = 1; //当前链表第几结点
position = Key % H->TableSize; /*初始散列位置*/
P = H->Heads[position].next; /*从该链表的第一个结点开始*/
/* 当未到表尾,并且Key未找到时*/
while( P!=NULL && P->data != Key)
{
P = P->next;
HelpPosition++;
}
return P;
}
/* 插入Key到哈希表 */
bool Insert(HashTable H,ElementType Key)
{
List P,NewP;
P = Find(H,Key);
if(!P)
{
NewP = (List)malloc(sizeof(struct Node));
NewP->data = Key;
NewP->ListPosition = HelpPosition;
position = Key % H->TableSize;
NewP->next = H->Heads[position].next;
H->Heads[position].next = NewP;
return true;
}
}
哈希表 挂链法
最新推荐文章于 2021-11-19 16:31:57 发布