11.29整理

有道云笔记

     16   9

3,15      6,10,63   1,16

哈希表

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

typedef int datatype;
typedef struct node{
	datatype data;
	struct node *next;
}*list;

int prime(int m);
void output(list hasi[],int p);
void charu(list hasi[],int p,datatype key);
list creat_node();
int search(list hasi[],int p,datatype key);
void free_space(list hasi[],int p);

int main(int argc, const char *argv[])
{
	int a[]={41,54,67,321,231,324,325,32,12,123};
	int len=sizeof(a)/sizeof(a[0]);
	int m=len*4/3;
	int p=prime(m);
	int i=0;

	list hasi[p];
	for(i=0;i<p;i++)
		hasi[i]=NULL;

	for(i=0;i<len;i++)
		charu(hasi,p,a[i]);
	output(hasi,p);

	printf("input key:");
	datatype key;
	scanf("%d",&key);
	int flag=search(hasi,p,key);
	if(key==-1)
		printf("key unexit\n");
	else printf("key exit\n");
	free_space(hasi,p);

	return 0;
}
int prime(int m)
{
	int i=m;
	int j;
	for(i=m;i>=2;i--)
	{
		int flag;
		for(j=2;j<=sqrt(m);j++)
		{
			if(i%j==0)
				flag=1;

		}
		if(flag==0)
			return i;
	}


}
list creat_node()
{
	list s=(list)malloc(sizeof(struct node));
	if(s==NULL)
		return NULL;
	s->data=0;
	s->next=NULL;
}

void charu(list hasi[],int p,datatype key)
{
	int index=key%p;
	list s=creat_node();
	s->data=key;

	if(hasi[index]==NULL)
		hasi[index]=s;
	else{
		s->next=hasi[index];
		hasi[index]=s;
	}

}
void output(list hasi[],int p)
{
	int i=0;
	for(i=0;i<p;i++)
	{
		printf("%d:",i);
		if(hasi[i]==NULL)
		{
			puts("NULL");
			continue;
		}

		list q=hasi[i];
		while(q!=NULL)
		{
			printf("%d ",q->data);
			q=q->next;
		}
		printf("\n");
	}

}
#if 1
int search(list hasi[],int p,datatype key)
{
	int index=key%p;
	list q=hasi[index];
	while(q!=NULL)
	{
		if(key==q->data)
			return 0;
		q=q->next;

	}
	return -1;
}
void free_space(list hasi[],int p)
{
	int i=0;
	for(i=0;i<p;i++)
	{
		if(hasi[i]==NULL)
			continue;
		else
		{
			while(hasi[i]!=NULL)
			{
				list del=hasi[i];
				hasi[i]=hasi[i]->next;
				free(del);
				del=NULL;			
			}

		}

	}

}
#endif

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值