2月5日作业

1.请编程实现哈希表的创建存储数组(12,24,234,234,23,234,23),输入key查找的值,实现查找功能

#include
#include
#include
#include
typedef int datatype;
typedef struct node
{
	datatype data;
	struct node *next;
}*node;

/*
 * function:    计算最大质数
 * @param [ in] 
 * @param [out] 
 * @return      返回最大质数
 */
int prime(int m)
{
	for(int i=m;i>2;i--)
	{
		int flag=0;
		for(int j=2;jdata=0;
	s->next=NULL;
	return s;
}

/*
 * function:    把数据元素依次存到哈希表中
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void insert_hash(int key,int p,node hash[])
{
	int index=key%p; //哈希函数
	hash[index]; //等价于单链表的头指针

	//创建新节点
	node s=creat_node();
	s->data=key;
	if(hash[index]==NULL)
		hash[index]=s;
	else
	{
		s->next=hash[index];
		hash[index]=s;
	}
}

//输出哈希表
void output(node hash[],int m)
{
	for(int i=0;idata);
			p=p->next;
		}
		puts("NULL");
	}
}

//哈希查找
int search_hash(datatype key,int p,node hash[])
{
	int index=key%p;
	node head=hash[index];
	while(head!=NULL)
	{
		if(head->data==key)
			return 0;
		head=head->next;
	}
	return -1;
}

int main(int argc, const char *argv[])
{
	int arr[]={12,24,234,234,23,234,23};
	int len=sizeof(arr)/sizeof(arr[0]);
	//哈希表长度
	int m=len*4/3;
	//定义哈希表
	node hash[m];
	for(int i=0;i

2月5日作业_第1张图片

2.现有数组12,23,45,56,445,5676,6888请输入key实现二分查找

#include
#include
#include

int half(int key,int *p,int low,int high)
{
	while(low<=high)
	{
		int m=(high+low)/2;
		if(*(p+m)key)
			high=m-1;
		else 
			return m;
	}
	return -1;

}

int main(int argc, const char *argv[])
{
	
	int arr[]={12,23,45,56,445,5676,6888};
	int key;
	printf("please enter key:");
	scanf("%d",&key);
	int len=sizeof(arr)/sizeof(arr[0]);
	int index=half(key,arr,0,len-1);
	if(index==-1)
		printf("no\n");
	else 
		printf("exists in %d\n",index);


	return 0;
}

2月5日作业_第2张图片

 

你可能感兴趣的:(哈希算法,散列表,数据结构)