电话号码查找系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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<Name<<'_'<Address<<'_'<Num<

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<Name<<'_'<Address<<'_'<Num<

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<Name<<'_'<Address<<'_'<Num<

p=p->next;

}

}

}

void list2()

{

int i;

node *p;

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

{

p=nam[i]->next;

while(p)

{

cout<Name<<'_'<Address<<'_'<Num<

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;

相关文档
最新文档