查找——哈希查找HashSearch

哈希查找

对无序数据,进行重复查找

基本思想

散列查找 散列即分组,按照某一特征进行查找,按照某种特征处理好——建立哈希表

  1. 创建哈希比表
    1. 确顶哈希散列函数(创建之前确定)——求整取余法 p = key%M (M <= n ) 有M组
    2. 定解决哈希冲突的办
      a. 开放地址法(线性探测(+1)、线性补偿探测(定间隔)->线性探测在散列(间隔改变 + - i * i) 、随机探测)——去其他位置探测存储
      b. 拉链法——发生冲突就生成链表
  2. 基于哈希表进行查找——利用指针数组
    实现
  3. 定义结构体
  4. 申请请空间
  5. 元素入表 找到链表 链表元素添加(头添加)
  6. 元素查找

代码

typedef struct Date
{
	int arrIndex;
	int nValues;
	struct Date * pNext;
}HashList;

void  HashInsert(HashList ** list,int nValue,int arrID)
{
	HashList * Node = (HashList *)malloc(sizeof(HashList));
	Node->nValues = nValue;
	Node->pNext = (*list);
	Node->arrIndex =arrID;
	(*list) = Node;
}

HashList ** CrateHashList(int arr[],int nlength)
{
	//哈希函数  n%10;
	//创建哈希表
	HashList ** parrHashList = (HashList **)malloc(sizeof(HashList*)*10);
	int i;
	for(i = 0 ; i < 10 ; i ++ )
	{
		parrHashList[i] = NULL;
	}

	for(i = 0 ; i < nlength ; i++)
	{
		// 放入表中
		HashInsert(&(parrHashList[arr[i]%10]),arr[i],i);
	}
	return parrHashList;
}

int HashSearch(HashList ** List , int nlength , int nValue )
{
	HashList * list = List[nValue%nlength];
	while(list != NULL)
	{
		if(list->nValues == nValue)
		{
			return list->arrIndex;
		}
		list = list->pNext;

	}
	return -1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老黑675

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值