程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 20//规定最多只能存20个用户
typedef struct number
{
int pnum;//电话号码
char name[20];//用户名
char address[30];//地址
int flag;
}tel;
int hash(int x)
{
int y;
y=x % 19;//对19取余就是0-19.刚好有20个数。
return y;
}
main()
{
tel t[M];
int n,i,j,x,w;
tel a[M]; //散列表
char s[20];
printf("\n请输入联系人个数:");
scanf("%d",&n);
for(i=0;i<M;i++)//初始化a数组。
{
a[i].flag=0;
}
for(i=0;i<n;i++)
{
printf("请输入第%d个人的用户名:",i+1);
scanf("%s",t[i].name);
x=t[i].name[0]; //将用户名首字母转换成ASCLL码
x=abs(x);
w=hash(x); //将用户名首字母的ASCLL码作为关键字放入散列表
printf("请输入第%d个人的电话号码:",i+1);
scanf("%d",&t[i].pnum);
printf("请输入第%d个人的地址:",i+1);
scanf("%s",t[i].address);
printf("%d\n",x);
printf("%d\n",w);
//建立散列表
if(a[w].flag==0)
{
strcpy(a[w].name,t[i].name);
a[w].pnum=t[i].pnum;
strcpy(a[w].address,t[i].address);
a[w].flag=1;
}
else if(a[w].flag!=0)
{
for(j=1;j<=3;j++)
{
if(a[w+j].flag==0)
{
strcpy(a[w+j].name,t[i].name);
a[w+j].pnum=t[i].pnum;
strcpy(a[w+j].address,t[i].address);
a[w+j].flag=1;
break;
}
else if(j==3)//当探索3次之后都不为空时。提示溢出
printf("%s溢出无法插入!!!\n",t[i].name);
}
}
}
//列出散列表
for(i=0;i<M;i++)
{
printf("%d ",i);
}
printf("\n");
for(i=0;i<M;i++)
{
printf("%s",a[i].name);
}
}
#include<stdlib.h>
#include<string.h>
#define M 20//规定最多只能存20个用户
typedef struct number
{
int pnum;//电话号码
char name[20];//用户名
char address[30];//地址
int flag;
}tel;
int hash(int x)
{
int y;
y=x % 19;//对19取余就是0-19.刚好有20个数。
return y;
}
main()
{
tel t[M];
int n,i,j,x,w;
tel a[M]; //散列表
char s[20];
printf("\n请输入联系人个数:");
scanf("%d",&n);
for(i=0;i<M;i++)//初始化a数组。
{
a[i].flag=0;
}
for(i=0;i<n;i++)
{
printf("请输入第%d个人的用户名:",i+1);
scanf("%s",t[i].name);
x=t[i].name[0]; //将用户名首字母转换成ASCLL码
x=abs(x);
w=hash(x); //将用户名首字母的ASCLL码作为关键字放入散列表
printf("请输入第%d个人的电话号码:",i+1);
scanf("%d",&t[i].pnum);
printf("请输入第%d个人的地址:",i+1);
scanf("%s",t[i].address);
printf("%d\n",x);
printf("%d\n",w);
//建立散列表
if(a[w].flag==0)
{
strcpy(a[w].name,t[i].name);
a[w].pnum=t[i].pnum;
strcpy(a[w].address,t[i].address);
a[w].flag=1;
}
else if(a[w].flag!=0)
{
for(j=1;j<=3;j++)
{
if(a[w+j].flag==0)
{
strcpy(a[w+j].name,t[i].name);
a[w+j].pnum=t[i].pnum;
strcpy(a[w+j].address,t[i].address);
a[w+j].flag=1;
break;
}
else if(j==3)//当探索3次之后都不为空时。提示溢出
printf("%s溢出无法插入!!!\n",t[i].name);
}
}
}
//列出散列表
for(i=0;i<M;i++)
{
printf("%d ",i);
}
printf("\n");
for(i=0;i<M;i++)
{
printf("%s",a[i].name);
}
}