哈希表(C语言描述)

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;
}

 运行结果:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值