思维导图
练习题
1.哈希查找
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
}*node;
node create()
{
node p=(node)malloc(sizeof(struct Node));
if(p==NULL) return NULL;
p->data=0;
p->next=NULL;
return p;
}
void insert(node hash[],int element,int m)
{
int index=element%m;
node s=create();
if(s==NULL)
{
return;
}
s->data=element;
if(hash[index]==NULL)
{
hash[index]=s;
}else{
s->next=hash[index];
hash[index]=s;
}
}
void output(node hash[],int m)
{
int i;
for(i=0;i<m;i++)
{
printf("%-8d",i);
if(hash[i]==NULL)
{
puts("NULL");
}else{
node p=hash[i];
while(p!=NULL)
{
printf("%-4d",p->data);
p=p->next;
}
puts("NULL");
}
}
}
int search(node hash[],int element,int m)
{
int index=element%m;
if(hash[index]==NULL)
{
return -1;
}
node p=hash[index];
while(p!=NULL)
{
if(p->data==element)
{
return 0;
}
p=p->next;
}
return -1;
}
int prime(int n)
{
int i,j;
for(i=n;i>=2;i--)
{
int flag=1;
for(j=2;j<n;j++)
{
flag=0;
break;
}
if(flag==1)
{
return i;
}
}
}
int main(int argc, const char *argv[])
{
int arr[]={3,44,12,25,43,77,34,54,66,18};
int length=sizeof(arr)/sizeof(arr[0]);
int n=length*4/3;
int m=prime(n);
node hash[m];
int i;
for(i=0;i<m;i++)
{
hash[i]=NULL;
}
for(i=0;i<length;i++)
{
insert(hash,arr[i],m);
}
output(hash,m);
printf("please enter to search number:");
int element;
scanf("%d",&element);
int flag=search(hash,element,m);
if(flag==0)
{
puts("exist");
}else{
puts("unexist");
}
return 0;
}