散列表(线性探测与链地址法)

本文介绍了一种使用关键字除留余数法构建哈希函数的方法,并探讨了线性探测再散列和链地址法两种冲突处理方式。通过具体实例,展示了如何计算哈希表的平均查找长度ASL。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以关键字除留余数法构建哈希函数H(key)=key MOD p,分别用线性探测再散列LinearConflict()和链地址法LinkConflict()处理冲突的方式来构建哈希表并计算其平均查找长度ASL,其中数据记录的数量n、哈希表的表长m>=n和哈希函数中的p<=m以及每个数据元素的关键字通过键盘或文本文件输入。

#include <opencv.hpp>
#include<stdio.h>
#include<cstdio>
#include<string.h>
#include<stdlib.h>
using namespace cv;
Mat srcImage1(600, 1000, CV_8UC3, Scalar(255, 255, 255));
int p=13;
int H(int key)
{
	return key - p * (key / p);
}
typedef struct link {
	int numb;
	struct link *next;
}LINK;
LINK *P[15];
struct haselink {
	LINK *list;
	int numb;
}hase_l[15];
int data[13] = { 1,7,34,67,32,56,89,39,48,45,41,87,65};
int hase[15] = { 0 };
int LinkConflict(int hase[],int position)
{
	while (1)
	{
		if (hase[position] != 0)
		{
			if (position / 14 == 1)
				position = 0;
			else position++;
		}
		else return position;
	}
}
int ASL()
{
	int dis = 0;
	for (int i = 0; i < 13; i++)
	{
		int key= H(data[i]);
		while (1)
		{
			if (hase[key] != 0)
			{
				if (key / 14 == 1)
					key = 0;
				else key++;
				dis++;
			}
			else break;
		}
	}
	return dis;
}
int main()//哈希表的链地址是用hase_l表示,线性探测用hase表示
{
	for (int i = 0; i < 15; i++)
	hase_l[i].list = NULL;
	for (int i = 0; i < 13; i++)
	{
		
		int key = H(data[i]);
		if (hase[key] == 0)
			hase[key] = data[i];
		else hase[LinkConflict(hase, key)] = data[i];
	}
	printf("ASL=%d\n",ASL());
	for (int i = 0; i < 13; i++)
	{
		int key = H(data[i]);
		if (hase_l[key].list == NULL)
		{
			hase_l[key].list = (LINK*)malloc(sizeof(LINK));
			hase_l[key].list->numb = data[i];
			hase_l[key].list->next = (LINK*)malloc(sizeof(LINK));
			P[key] = hase_l[key].list->next;
		}
		else {
		P[key]->numb = data[i];
		P[key]->next = (LINK*)malloc(sizeof(LINK));
		P[key] = P[key]->next;
		}
	}
	return 0;
}


``

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值