用c语言写的电话簿的程序,用C语言散列表实现电话薄

#用C语言散列表实现电话薄# 标题0c53fd7bd8e047ce8f84956e3297d7be.jpg

#include#include#includetypedef struct node

{

char num[11],name[15],address[20],city[15],etp[20];

struct node *next;

}NUM;

struct NUM *num_list[19];

int hash(char num[])

{

int i,k=0;

for(i=0;num[i]!=’\0’;i++)

{

k=10*k+num[i]-48; //字符转化为数字

}

k=(k%19); //除余法求散列地址

return k;

}//c除留余数法处理电话号码

void create()

{

struct node *p1;

int k1,m=0;

while(m==0)

{

printf(“请输入你想添加人的信息:num name address city etp,\n”);

p1=(struct node *)malloc(sizeof(struct node));

scanf("%s",p1->num);

scanf("%s",p1->name);

scanf("%s",p1->address);

scanf("%s",p1->city);

scanf("%s",p1->etp);

k1=hash(p1->num);//用num数组值作为参数传递给哈希函数得到k1

p1->next=num_list[k1];//將k1得到的值作为数组的储存地址赋值给头结点的下一个节点

num_list[k1]=p1;//再將p1的数据传递给数组,故p1可以释放作为下一个节点产生

printf(“结束请按1,再次输入请按0\n”);

scanf("%d",&m);

}

printf(“通讯表已经创建\n”);

}

void dlter()

{

char num[11];

int k1;

int find=0;

struct node *f;

printf(“请查询要修改的联系人的电话:\n:”);

scanf("%s",num);

k1=hash(num);

f=num_list[k1];

while(f!=NULL)

{

if(strcmp(f->num,num)==0)

{

printf(“查找到了!请输入要修改的人的资料:\n”);

scanf("%s%s%s",f->num,f->name,f->address,f->city,f->etp);

find=1;

}

f=f->next;

}

if(find=0)

printf(“没有找到要删除的节点!”);

}

void list()

{

struct node *f;//打印节点指针

int i;

printf(“打印通讯录如下:\n”);

for(i=0;i<19;i++)

{

f=num_list[i];

while(f!=NULL)

{

printf("—>num:%s\t name:%s\t address:%s\t city:%s\t etp:%s\t \n",f->num,f->name,f->address,f->city,f->etp);

f=f->next;

}

}

}

void add()

{

char num[11],name[15],address[20],city[15],etp[20];

struct node *p1;

int k1;

printf(“请输入新添加的人的信息:电话 姓名 地址 城市 邮箱\n”);

p1=(struct node *)malloc(sizeof(struct node));

scanf("%s%s%s%s%s",num,name,address,city,etp);

strcpy(p1->num,num);

strcpy(p1->name,name);

strcpy(p1->address,address);

strcpy(p1->city,city);

strcpy(p1->etp,etp);

k1=hash(p1->num);

p1->next=num_list[k1];

num_list[k1]=p1;

printf(“ok\n”);

}

void search()

{

char num[11];

int k1;

int find=0;

struct node *f;

printf(“请输入查询人的电话号码:”);

scanf("%s",num);

k1=hash(num);

f=num_list[k1];

while(f!=NULL)

{

if(strcmp(f->num,num)==0)

{

printf(“所要查找的联系人信息 :num:%s name:%s address:%s city:%s etp:%s\n”,f->num,f->name,f->address,f->city,f->etp);

find=1;

}

f=f->next;

}

if(find=0)

printf(“此联系人没有找到!”);

}

void main()

{

int i;

char x;

for(i=0;i<19;i++)

{

num_list[i]=NULL;

}

while(1)

{

// system(“cls”);

printf("\n");

printf(" 通讯录\n");

printf(" ------------------------------------------\n");

printf(" ----       1.建立       ----\n");

printf(" ----            ----\n");

printf(" ---- 2.查找      ----\n");

printf(" ----      ----\n");

printf(" ---- 3.添加     ----\n");

printf(" ----      ----\n");

printf(" ----     4.修改       ----\n");

printf(" ----          ----\n");

printf(" ---- 5.打印     ----\n");

printf(" ----          ----\n");

printf(" ---- 6.结束       ----\n");

printf(" ------------------------------------------\n");

printf(" ------------------------------------------\n");

// x=getchar();

scanf("%s",&x);

switch(x)

{

case ‘1’: create();break;

case ‘2’: search();break;

case ‘3’: add();break;

case ‘4’: dlter();break;

case ‘5’: list();break;

case ‘6’: return;

default:printf(“请重新输入;\n”);

}

}

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值