哈希表的创建,以及一个使用实例,基础太薄弱了,哈希表都写了好久,代码书写要更流畅和易读。
/*哈希表的实现,采用分离链接法*/
#include<stdio.h>
#include<stdlib.h>
#include"try.h"
/*struct listNode;
typedef struct listNode* Postion;
struct listNode
{
int val;
Postion next;
};
typedef Postion List;
struct Hashtable;
typedef struct Hashtable* Hashble;
struct Hashtable
{
int Hashsize;
List* listarray;
};*/
/*映射函数*/
int Hash(int val,int Hashsize)
{
return val%Hashsize;
}
/*初始化哈希表*/
Hashble iniHash(int Tablesize)
{ Hashble H;
int i;
H=(Hashble)malloc(sizeof(struct Hashtable));
if(H==NULL)
printf("分配失败");
H->Hashsize=Tablesize;
H->listarray=(List*)malloc(H->Hashsize *sizeof(List));
if(H->listarray==NULL)
printf("分配失败");
/*创建数组链表中每个链表的表头*/
for(i=0;i<H->Hashsize;i++)
{
H->listarray[i]=(List)malloc(sizeof(struct listNode));
if(H->listarray[i] == NULL)
printf("分配失败");
else
H->listarray[i]->next = NULL;
}
return H;
}
/*将1-20写入存入哈希表中,哈希表大小为 7,并全部打印出来*/
Hashble main()
{
int val;
int Hashsize=7;
int i;
Hashble H;
List n,m;
H=iniHash(Hashsize);
scanf("%d",&val);
while(val<21)
{
i=Hash(val,Hashsize);
/*H->listarray[i]=(List)malloc(sizeof(struct listNode));
H->listarray[i]->val=val;*/
n=(List)malloc(sizeof(struct listNode));
n->val=val;
n->next=H->listarray[i]->next;
H->listarray[i]->next=n;
scanf("%d",&val);
}
for(i=0;i<Hashsize;i++)
{
m=H->listarray[i]->next;
while(m!=NULL)
{
printf("%d ",m->val);
m=m->next;
}
printf("\n");
}
return H;
}