1、本程序需要用到两个结构体,分别为通讯录 message以及哈希表HxList2.程序模块本程序包含两个模块,一个是实现功能的函数的模块,另一个是主函数模块。系统子程序及功能设计本系统共有三个子程序,分别是:int Hx(long long key,int data)/哈希函数void BulidHx(HxList &L)/建立通讯录int Search(HxList &L)/查找3. 各模块之间的调用关系以及算法设计主函数调用BulidHx以及Search函数。函数BulidHx调用函数Hx。三、详细设计1.数据类型定义typedef struct char *name; char *add;
2、 long long phonenumber;message; message *list; int number;/记录数HxList;2.系统主要子程序详细设计a. 建立通讯录 FILE *f = fopen(E:tongxunlu.txt, w); char buf20=0,str20=0; long long key; coutL.number; L.number+=1; L.list=new messageL.number;/分配哈希表的存储空间 for(int i=0;ikeybufstr; int pose=Hx(key,L.number);/获取理论上的存储位置 if(L.li
3、stpose.phonenumber=-1) else /用二次探测再散列法解决冲突 /12 -12 22 -22 int di,count=1; xunhuan: if(count%2=0) di=-(count/2)*(count/2); else di=(count/2)+1)*(count/2)+1); int site=Hx(key+di,L.number); if(site=0) if(L.listsite.phonenumber=-1) pose=site; else count+; goto xunhuan; else site=L.number-abs(site); L.li
4、stpose.phonenumber=key; fprintf(f,%lld,key); L.listpose.name=new charstrlen(buf)+1; strcpy(L.listpose.name,buf);%s,buf); L.listpose.add=new charstrlen(str)+1; strcpy(L.listpose.add,str);,str);nb.查找输入要查找记录的关键字(电话号码):key; int pose=Hx(key,L.number);/计算理论上的位置 if(L.listpose.phonenumber=key) else int coun
5、t=1,di;/二次探测再散列,查找xunhuan: di=-(count/2)*(count/2); di=(count/2)+1)*(count/2)+1); int site=Hx(key+di,L.number); if(site if(L.listsite.phonenumber=key) cout没有找到 return -1;/没有找到 if(L.listsite.phonenumber=-1) if(L.listpose.phonenumber=key) cout电话号码t用户名t地址L.listpose.phonenumbertL.listpose.nameL.listpose.add return pose;四、测试与分析1.显示主菜单,运行程序可以显示出如下界面。2.建立通讯录 在主菜单下选1,建立通讯录,按照规定格式输入电话号码姓名以及地址,即可在E盘根目录下建立tongxunlu.txt文件,保存通讯录信息。 3.查找在主菜单下选2,完成查找功能,输入要查找的电话号码,即可得到该电话号码对应的姓名以及地址。4.退出系统在主菜单下选3,退出程序。五、附录1.通讯查询系统.h#includeusing namespace std;int Hx(long long key,int data) return key%(data-1);e
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1