1.定义哈希列表结构体
typedef struct HashList
{
int num;//目前存放多少数据
char *data;//存放数据的data数组
}HashList;
2.初始化列表
HashList *initList()
{
HashList *list = (HashList*)malloc(sizeof(HashList));//申请哈希结构体空间
list->data = (char*)malloc(sizeof(char)*NUM);//为结构体内的数据域申请空间
list->num = 0;//列表内初始元素个数为0
int i;
for(i=0;i<NUM;i++)
list->data[i] = 0;//数据域内所有元素初始为0
return list;
}
3.将字符型数据转为整形(ASII码)
int hash(char data)
{/*参数:要转换的元素*/
return data%NUM;
}
4.线性探测法插入数据
void put(HashList *list,char data)
{/*参数一:列表指针
参数二:要插入的数据*/
static int index;
index = hash(data);//首先转换成ASII码形式赋值给下标变量
if(list->data[index]!=0)//冲突
{
int count = 1;//计数
while(list->data[index]!=0)//冲突
{
// index = hash(hash(data)+count);//找下一个位置插入
index = hash(index+count);
count++;
}
}
list->data[index] = data;//将数据放入指定位置
}
5.遍历输出
void printList(HashList *list)
{
int i;
for(i=0;i<NUM;i++)
{/*按序遍历结构体内data域所有元素,下标为0则表示该位置没有元素*/
if(list->data[i]==0)
printf("%d:No data\n",i+1);
else
printf("%d:%c\n",i+1,list->data[i]);
}
}
6.主函数
int main()
{
HashList *list = initList();//初始化列表
put(list,'A');//写入数据
put(list,'F');
printList(list);//输出
return 0;
}
完整代码:
#include <stdio.h>
#include <stdlib.h>
#define NUM 5
/*定义哈希列表结构体*/
typedef struct HashList
{
int num;//目前存放多少数据
char *data;//存放数据的data数组
}HashList;
/*初始化列表*/
HashList *initList()
{
HashList *list = (HashList*)malloc(sizeof(HashList));//申请哈希结构体空间
list->data = (char*)malloc(sizeof(char)*NUM);//为结构体内的数据域申请空间
list->num = 0;//列表内初始元素个数为0
int i;
for(i=0;i<NUM;i++)
list->data[i] = 0;//数据域内所有元素初始为0
return list;
}
/*将字符型数据转为整形(ASII码)*/
int hash(char data)
{/*参数:要转换的元素*/
return data%NUM;
}
/*线性探测法插入数据*/
void put(HashList *list,char data)
{/*参数一:列表指针
参数二:要插入的数据*/
static int index;
index = hash(data);//首先转换成ASII码形式赋值给下标变量
if(list->data[index]!=0)//冲突
{
int count = 1;//计数
while(list->data[index]!=0)//冲突
{
// index = hash(hash(data)+count);//找下一个位置插入
index = hash(index+count);
count++;
}
}
list->data[index] = data;//将数据放入指定位置
}
/*遍历输出*/
void printList(HashList *list)
{
int i;
for(i=0;i<NUM;i++)
{/*按序遍历结构体内data域所有元素,下标为0则表示该位置没有元素*/
if(list->data[i]==0)
printf("%d:No data\n",i+1);
else
printf("%d:%c\n",i+1,list->data[i]);
}
}
int main()
{
HashList *list = initList();//初始化列表
put(list,'A');//写入数据
put(list,'F');
printList(list);//输出
return 0;
}
运行结果: