c 哈希表

理解哈希表,就是先生成一 临时数组,用于存放全部待检测数的值,再创造一函数,关联待检测数与临时数组的每一元素的下标。

查询时根据关联函数用待检测数推算出临时函数的下标值,再读出此下标的元素值。这样就省去了遍历待检测数组的时间。

 

哈希表简单地理解为,一次扫描,永久使用。

用数组作为临时数组


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {

   /* 
    typedef struct node {
		int data;
		struct node *next;
	}HASH;
	*/
   
	int zhi[3]={1,2,3};      //待检测数组    


	int *ha=malloc(10000*4);       //临时数组,可以存放10000个地址
	
	for(int a=0;a<3;a++){       	//扫描目标数组zhi,一次生成键值对,存在ha数组中
		
		int key=zhi[a]+1;    //哈希函数,把目标数与key关联
		ha[key]=zhi[a];	     
	}
	
	//查询
	
	int o=3;  //查询3是否存在
	int key1=o+1;  //哈希关联函数
	printf("%d\n",ha[key1]); //这样就不用遍历zhi[]数组
	
	free(ha);
	return 0;
}

用struct 作为临时数组


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {

    
    typedef struct node {
		int data;
		struct node *next;
	}HASH;
	
   
	
	int zhi[3]={1,2,3};          

	//扫描目标数组zhi一次生成ha键值对ha数组
	 HASH ha[20]={};
	for(int a=0;a<3;a++){
		
		int key=zhi[a]+1;    //哈希函数,把目标数与key关联
		ha[key].data=zhi[a];	
	}
	
	//查询
	
	int o=3;  //查询3是否存在
	int key1=o+1;  //哈希关联函数
	printf("%d\n",ha[key1].data); //这样就不用遍历zhi[]数组
	
	return 0;
}

这种加减乘除,求余数,取数值几位的函数方法只适用于数值如int数组。遇到字符串如待检测是中文名字就不能用此方法创建关联函数。

 

 

 

 

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值