利用C语言建立哈希表查找图书

一.构建哈希函数的方法

  1. 直接地址法
  2. 除留余数法
  3. 平方取中法
  4. 折叠法
  5. 数值分析法

二.利用除留余数方法查找图书

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

#define MAXSIZE 5
#define NULLKEY -32768

typedef struct{
	char name[20];
	int number;
}book;

typedef struct{
	book *elem;
	int count;
}HashTable;

//初始化哈希表
int InitHashTable(HashTable &H)
{
	int i;
	H.elem = (book*)malloc(MAXSIZE*sizeof(book));
	if(!H.elem)exit(-2);
	H.count = MAXSIZE;
	for(i=0;i<MAXSIZE;i++)
	{
		H.elem[i].number=NULLKEY;
	}
	return 1;
}

//哈希函数
int Hash(int key)
{
	return key%MAXSIZE;
}

//插入关键字进入哈希表
void InsertHash(HashTable &H,book &key)
{
	int addr = Hash(key.number);
	while(H.elem[addr].number!=NULLKEY)
		addr = (addr+1)%MAXSIZE ;    //发生冲突,将关键字移向下一个储存地址
	H.elem[addr] = key;
}

//查找图书
int SearchHash(HashTable H,int key)
{
	int addr;
	addr=Hash(key);
	while(H.elem[addr].number!=key)                        //判断这个地址是否为所找书单
	{
		addr = (addr+1)%MAXSIZE;
		if(H.elem[addr].number==NULLKEY||addr==Hash(key))  //下一个地址为空或者循环一圈没有找到,返回错误
		{
			return -1;
		}
	}
	return addr;
 } 

int main()
{

	int i ,number,j;
	book s[MAXSIZE]={{"English",5},{"math",6},{"C",9},{"python",8},{"Chinese",7}};

	printf("书名           编号\n");
	for(i=0;i<MAXSIZE;i++)
		printf("%-7s  %7d\n",s[i].name,s[i].number);
	
	
	
	
	HashTable H;
	InitHashTable(H);
	for(i=0;i<MAXSIZE;i++)
	{
		InsertHash(H,s[i]);
	}
	printf("\n\n插入之后的哈希表为:\n\n");
	printf("书名           地址\n");
	for(i=0;i<MAXSIZE;i++)
		printf("%-7s  %7d\n",H.elem[i].name,i);


	printf("\n\n请输入要查找图书的编号:");
	scanf("%d",&number);
	j=SearchHash(H,number);
	printf("你查找的图书为:");
	printf("“%s”\n",H.elem[j].name);
	return 0;

}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值