C语言实现散列表链地址法存储电话号码信息
#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("散列表初始化完毕"); }
void hashinputname(newnode **p) {//添加记录 用户名为关键词 链地址法 int i,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); i=(int)e->name[0];//强制转换为int类型 i=i%n; e->next=p[i]; p[i]=e; printf("输入电话号码,输入-1结束"); 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("所查询的用户不存在"); } 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("所查询的用户不存在"); } 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("输入你使用的功能"); 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; } }
原文地址: https://www.cveoy.top/t/topic/prIL 著作权归作者所有。请勿转载和采集!