电话号码查找系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构与算法设计》课程设计报告
题目:散列表的设计与实现
学生姓名:
学号:
班级:
指导教师:
2012年1 月 5 日
一、设计分析
用散列表实现电话号码的查询,分别以电话号码和用户名作为关键字建立散列表,建立不同数组分别存放姓名和电话号码,实现用户信息的插人、删除、查找等功能,采用线性探测法解决冲突。
二、总体设计
三、功能实现
定义结点类型:
struct node
{
char Name[20],Address[20];
char Num[11];
node *next;
};
插入记录:
node * input()
{
node *temp;
temp=new node;
temp->next=NULL;
cout<<"输入姓名:"< cin>>temp->Name; cout<<"输入地址:"< cin>>temp->Address; cout<<"输入电话号码:"< cin>>temp->Num; return temp; } int apend() { node *newphone; node *newname; newphone=input(); newname=newphone; newphone->next=phone[hash(newphone->Num)]->next; phone[hash(newphone->Num)]->next=newphone; newname->next=nam[hash2(newname->Name)]->next; nam[hash2(newname->Name)]->next=newname; return 0; } 查询记录:函数find()按电话号码查询记录,find2()按姓名查询记录 void find(char Num[11]) { int i,j=0; node *p; for(i=0;i<20;i++) { p=phone[i]->next; while(p) { if(strcmp(Num,p->Num)==0) { cout< j++; } p=p->next; } } if(j==0)cout<<"无此记录!!!!"< } void find2(char Name[8]) { int i,j=0; node *p; for(i=0;i<20;i++) { p=nam[i]->next; while(p) { if(strcmp(Name,p->Name)==0) { cout< j++; } p=p->next; } } if(j==0) cout<<"无此记录!!!!"< } 姓名散列和号码散列:用hash()、hash2()函数分别以姓名和电话号码为关键字继续哈希排列,然后用list()、list2()函数对两组排列的信息进行输出 hash(char Num[11]) { int i=3,j; key2=(int)Num[2]; while(Num[i]!=NULL) { key2+=(int)Num[i]; i++; } key2=key2%20; for(j=0;j<20;j++) { key=(key2+j)%20; if(phone[key]->Num=="") break; } return(key); } hash2(char Name[20]) { int i=1,j; key3=(int)Name[0]; while(Name[i]!=NULL) { key3+=(int)Name[i]; i++; } key3=key3%20; for(j=0;j<20;j++) key=(key3+j)%20; if(phone[key]->Name=="") break; } return(key); } void list() { int i; node *p; for(i=0;i<20;i++) { p=phone[i]->next; while(p) { cout< p=p->next; } } } void list2() { int i; node *p; for(i=0;i<20;i++) { p=nam[i]->next; while(p) { cout< p=p->next; } } } 清空记录:对结点进行置空处理,从而清空记录 void create() { int i; phone =new pnode[20]; for(i=0;i<20;i++) { phone[i]=new node; phone[i]->next=NULL;