当前位置:首页 > 数据结构课程设计 - — - 通讯录的制作 - 图文
选择“0”, 显示通讯录信息并退出通讯录,则有下图: 然后按任意键退出程序。 4.4.2分析 调试过程中我认为比较复杂的是用哈希表的二次探测再散列法解决冲突的算法不是特别容易研究明白,故对整个哈希表的定义与执行都是个不小的挑战,于是我设法通过查询资料,对其算法进行了仔细的分析,只要将二次探测再散列法的数学关系式琢磨透了,对于算法的表达就容易多了。因为二次探测再散列法是对出现冲突后,进行的摆动数列的方法解决冲突,其中需要考虑数据的变化、符号的改变和位置的准确移动,所以数学关系式思考起来比较麻烦。 4.5 程序代码 #include
NA name; NA tel; NA add; }Record; typedef struct{ //哈希表 Record *elem[HASHSIZE]; //数据元素存储基址 int count; //当前数据元素个数 int size; //当前容量 }HashTable; Status eq(NA x,NA y) { //关键字比较,相等返回SUCCESS;否则返回UNSUCCESS if(strcmp(x,y)==0) return SUCCESS; else return UNSUCCESS; }Status NUM_BER; //记录的个数 long fold(NA s) { //人名的折叠处理,就是将名字转换成一个数值 char *p; long sum=0; NA ss; strcpy(ss,s); //复制字符串,不改变原字符串的大小写//strupr(ss);//将字符串ss转换为大写形式 p=ss; while(*p!='\\0') sum+=*p++; //将字符串转换成一个int型的值用于hash表的计算比较 printf(\的转换hashCode是%ld\\n\ return sum; } int Hash1(NA str) { //哈希函数 long n; int m; n=fold(str); //先将用户名进行折叠处理 m=n%HASHSIZE; //折叠处理后的数,用除留余数法构造哈希函数 return m; //并返回模值 } 18
int Hash2(NA str) { //哈希函数 long n; int m; n = atoi(str); //把字符串转换成整型数. m=n%HASHSIZE; //用除留余数法构造哈希函数 return m; //用除留余数法构造哈希函数 } Status collision(int p,int c) { //冲突处理函数,采用二次探测再散列法解决冲突 int i,q; i=c/2+1; while(i
int i,p=-1,c,pp; for(i=0;i
共分享92篇相关文档