设计散列表实现电话号码查找系统数据结构课程设计内容摘要:

efstream define NULL 0 unsigned int key。 unsigned int key1。 unsigned int key2。 散列表的建立以及冲突处理函数 hash(char num[11]) //建表,以人的电话号码为关键字,建立相应的散列表若哈希地址发生冲突,进行冲突处理。 { int i = 3,j。 key1=(int)num[2]。 while(num[i]!=NULL) { key1+=(int)num[i]。 i++。 } key1=key1%20。 8 for(j=0。 j20。 j++) //线性探测法解决冲突 { key=(key1+j)%20。 if(phone[key]num==) break。 } return(key)。 } hash2(char name[8]) //建表,以人的姓名为关键字,建立相应的散列表 //若哈希地址发生冲突,进行冲突处理 { int i = 1,j。 key2=(int)name[0]。 while(name[i]!=NULL) { key2+=(int)name[i]。 i++。 } key2=key2%20。 for(j=0。 j20。 j++) //线性探测法解决冲突 { key=(key2+j)%20。 if(phone[key]name==) break。 } return(key)。 } 主函数 int main() { cout 欢迎使用电话号码查找系统 endl。 cout****************************endl。 char num[11]。 char name[8]。 create()。 create2()。 int sel。 while(1) { menu()。 cinsel。 //输入选择项目操作 9 if(sel==0) { cout请输入要添加的内容 :endl。 apend()。 } else if(sel==1) { cout9 号码查询, 8 姓名查询 endl。 int b。 cinb。 if(b==9) { cout请输入电话号码 :endl。 cin num。 cout输出查找的信息 :endl。 find(num)。 } else if(b==8) { cout请输入姓名 :endl。 cin name。 cout输出查找的信息 :endl。 find2(name)。 } else printf(不合法操作。 \n)。 } else if(sel==2) { cout姓名散列结果 :endl。 list2()。 } else if(sel==3) { cout号码散列结果 :endl。 list()。 } else if(sel==4) { cout列表已清空 :endl。 create()。 create2()。 } else if(sel==5) { cout通信录已保存 :endl。 save()。 } else if(sel==6) {int c。 cout删除信息 :endl。 cout endl。 10 cin c。 if(c==9) { cout请输入号码: endl。 cin num。 Delete(num)。 } else if(c==8) { cout请输入姓名: endl。 cin name。 Delete1(name)。 } else cout不合法操作。 endl。 cout信息已删除 \nendl。 } else if(sel==7) return 0。 else cout不合法操作。 endl。 } return 0。 } 各模块之间的调用关系 各个模块内部的具体算法,包括输入 、处理和输出,相当于 C++语言的过程或函数设计。 整体算法描述:建立一个结构来存放学生信息 ,再将该结构存入文件中 ,按要求通过调用各个函数对文件内的数据进行操作及处理。 各个分函数算法描述:由主函数调用 apend 函数建立一个新的文件用于存储通讯录。 主函数 void main 调用 void list 输出信息; 主函数 void main 调用 void find 查找学生记录; 主函数 void main 调用 void apend 添加记录; 主函数 void main 调用 void creat 进行新建节点操作以清空记录。 调用函数通过 if 语句实现,将文件里的数据与所输入的数据对比,如果相等就进行相关操作,如果不相等回到主菜单。 11 源程序代码 include include includeiostream include includefstream define NULL 0 unsigned int key。 unsigned int key1。 unsigned int key2。 int *p。 struct node //建节点 { char name[8],address[20]。 char num[11]。 node *next。 }。 typedef node *pnode。 typedef node *mingzi。 node **phone。 node **nam。 node *a。 using namespace std。 //使用名称空间 hash(char num[11]) //建表,以人的电话号码为关键字,建立 相应的散列表若哈希地址发生冲突,进行冲突处理。 { int i = 3,j。 key1=(int)num[2]。 while(num[i]!=NULL) { key1+=(int)num[i]。 i++。 } key1=key1%20。 for(j=0。 j20。 j++) //线性探测法解决冲突 { key=(key1+j)%20。 if(phone[key]num==) break。 } return(key)。 } 12 hash2(char n。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。