#include<stdio.h> #include<string.h> #include<stdlib.h> #include <malloc.h> #define size 100 #define n 20 typedef struct node { //单链列表 链地址法
int number; char address[size]; char name[size]; struct node *next; }newnode,*anode; void hashlistinit(newnode **p) {//初始化链列表地址 int i; for(i=0;i<n;i++) { p[i]=NULL; }

printf("散列表初始化完&#x6bd5"); }

void hashinputname(newnode **p) {//添加记录 用户名为关键词 链地址法 int i,v; printf("输入数据 "); printf("输入电话号码,输入-1结&#x675f"); scanf("%d",&v); while(v!=-1) { anode e=(anode)malloc(sizeof(newnode)); e->number=v; printf("输入地址 "); scanf("%s",e->address); printf("输入英文姓&#x540d"); scanf("%s",e->name); i=(int)e->name[0];//强制转换为int类型 i=i%n; e->next=p[i]; p[i]=e; printf("输入电话号码,输入-1结&#x675f"); scanf("%d",&v); } } void hashshow2name(newnode **p) {//查询记录以用户名为关键词 (链地址法 ) char a[size]; anode t; int i; printf("输入要查询的用户名 "); scanf("%s",a); i=(int)a[0]; i=i%n; t=p[i]; while(t&&strcmp(t->name,a)!=0) { t=t->next; } if(t==NULL) { printf("所查询的用户不存&#x5728"); } else { printf("---------------- "); printf("姓名:%s ",t->name); printf("电话:%d ",t->number); printf("地址:%s ",t->address); printf("---------------- "); } } void hashinput(newnode **p) {//添加记录 以号码为关键词 链地址法 int t,v; printf("输入数据 "); printf("输入电话号码,输入-1结束 "); scanf("%d",&v); while(v!=-1) { anode e=(anode)malloc(sizeof(newnode)); e->number=v; printf("输入地址 "); scanf("%s",e->address); printf("输入英文姓名 "); scanf("%s",e->name); t=e->number%n; e->next=p[t]; p[t]=e; printf("输入电话号码,输入-1结束 "); scanf("%d",&v); }

} void hashshow(newnode p) {//查询记录 以号码为关键词 链地址法 int d,h; anode t; printf("输入是要查询的号码 "); scanf("%d",&d); h=d%n; t=p[h]; while(t&&t->number!=d) { t=t->next; } if(t==NULL) { printf("所查询的用户不存&#x5728"); } else { printf("---------------- "); printf("姓名:%s ",t->name); printf("电话:%d ",t->number); printf("地址:%s ",t->address); printf("---------------- "); } } int scan2() { int j1; printf("************************* ");

printf(" 菜单 2
");

printf("*************************** ");

printf("1.初始化散列表 "); printf("2.添加记录(以用户名为关键词) "); printf("3.查询记录(以用户名为关键词) "); printf("4.添加记录(以号码为关键词) "); printf("5.查询记录(以号码为关键词) "); printf("6.退出系统 "); printf("输入你使用的功&#x80fd"); scanf("%d",&j1); return j1;

} int main() { int v,x; newnode *p[n]; v=1; while(v) { x=scan2(); switch(x) {

case 1:hashlistinit(p);break; case 2:hashinputname(p);break; case 3:hashshow2name(p);break; case 4:hashinput(p);break; case 5:hashshow(p);break; case 6:v=0;break; default:printf("输入错误 ");break; } }

C语言实现散列表链地址法存储电话号码信息

原文地址: https://www.cveoy.top/t/topic/prIL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录