数据结构哈希表设计.docx

上传人:b****6 文档编号:4102670 上传时间:2022-11-27 格式:DOCX 页数:10 大小:33.24KB
下载 相关 举报
数据结构哈希表设计.docx_第1页
第1页 / 共10页
数据结构哈希表设计.docx_第2页
第2页 / 共10页
数据结构哈希表设计.docx_第3页
第3页 / 共10页
数据结构哈希表设计.docx_第4页
第4页 / 共10页
数据结构哈希表设计.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

数据结构哈希表设计.docx

《数据结构哈希表设计.docx》由会员分享,可在线阅读,更多相关《数据结构哈希表设计.docx(10页珍藏版)》请在冰豆网上搜索。

数据结构哈希表设计.docx

数据结构哈希表设计

实验六:

存储管理、查找和排序

题目:

哈希表设计

班级:

姓名:

学号:

 

一、问题描述

针对某个集体(比如你所在的班级)中的“人名”设计一个哈希表,使得平均查找长度均不超过R,完成相应的建表和查表顺序。

二、大体要求

假设人名为中国人姓名的汉语拼音形式。

待填入哈希表的人名共有30个,取平均查找长度的上限为2。

哈希函数用除留余数法构造,用伪随机探测再散列法处置冲突。

三、概要设计

1.构造结构体:

typedefstruct{};

2.姓名表的初始化:

voidInitNameTable();

3.成立哈希表:

voidCreateHashTable();

4.显示姓名表:

voidDisplayNameTable();

5.姓名查找:

voidFindName();

6.主函数:

voidmain() ;

四、详细设计

1.姓名表的初始化

voidInitNameTable()        

{

   NameTable[0].py="louyuhong";

      NameTable[1].py="shenyinghong";

      NameTable[2].py="wangqi";

      NameTable[3].py="zhuxiaotong";

      NameTable[4].py="zhataotao";

      NameTable[5].py="chenbinjie";

      NameTable[6].py="chenchaoqun";

      NameTable[7].py="chencheng";

      NameTable[8].py="chenjie";

      NameTable[9].py="chenweida";

      NameTable[10].py="shanjianfeng";

      NameTable[11].py="fangyixin";

      NameTable[12].py="houfeng";

      NameTable[13].py="hujiaming";

      NameTable[14].py="huangjiaju";

      NameTable[15].py="huanqingsong";

      NameTable[16].py="jianghe";

      NameTable[17].py="jinleicheng";

      NameTable[18].py="libiao";

      NameTable[19].py="liqi";

      NameTable[20].py="lirenhua";

      NameTable[21].py="liukai";

      NameTable[22].py="louhanglin";

      NameTable[23].py="luchaoming";

      NameTable[24].py="luqiuwei";

      NameTable[25].py="panhaijian";

      NameTable[26].py="shuxiang";

      NameTable[27].py="suxiaolei";

      NameTable[28].py="sunyubo";

      NameTable[29].py="wangwei";

      for(i=0;i

             for(j=0;*(p+j)!

='\0';j++)             

                    s+=toascii(*(p+j));

             NameTable[i].m=s;

      }

}

2.成立哈希表

voidCreateHashTable()

{

      for(i=0;i

      {

             HashTable[i].py="\0";

             HashTable[i].m=0;

             HashTable[i].si=0;

      }

      for(i=0;i

      {

             intsum=1,j=0;

             intadr=(NameTable[i].m)%P; i==0)    =NameTable[i].m;

                    HashTable[adr].py=NameTable[i].py;  

                    HashTable[adr].si=1;     

             }

             else                        i!

=0)

                    {

                           adr=(adr+d[j++])%HASH_LEN;  =NameTable[i].m; y=NameTable[i].py;  

                    HashTable[adr].si=sum; 

             }

      }

}

3.显示姓名表与哈希表

voidDisplayNameTable()

{

      printf("\n地址\t\t姓名\t\t关键字\n");

      for(i=0;i

             printf("%2d%18s\t\t %d \n",i,NameTable[i].py,NameTable[i].m);   

}

voidDisplayHashTable()

{

floatasl=;

      printf("\n\n地址\t\t姓名\t\t关键字\t搜索长度\n");y,HashTable[i].m,HashTable[i].si);

            asl+=HashTable[i].si;

      }

      asl/=NAME_LEN;                       ==s&&!

strcmp(HashTable[adr].py,name))         y,s);

      elseif(HashTable[adr].m==0)

             printf("没有想要查找的人!

\n");

      else

      {

             while

(1)

             {

           adr=(adr+d[j++])%HASH_LEN;      ==0)

                    {

                          printf("没有想要查找的人!

\n");

                       break;

                    }

                    if(HashTable[adr].m==s&&!

strcmp(HashTable[adr].py,name))

                    {

                           printf("\n姓名:

%s  关键字:

%d  查找长度为:

%d\n",HashTable[adr].py,s,sum);

                           break;

                    }

             }

      }

}

五、测试结果

六、实验环境

C-Free

 

七、源程序代码

#include<>

#include<>y="louyuhong";

NameTable[1].py="shenyinghong";

NameTable[2].py="wangqi";

NameTable[3].py="zhuxiaotong";

NameTable[4].py="zhataotao";

NameTable[5].py="chenbinjie";

NameTable[6].py="chenchaoqun";

NameTable[7].py="chencheng";

NameTable[8].py="chenjie";

NameTable[9].py="chenweida";

NameTable[10].py="shanjianfeng";

NameTable[11].py="fangyixin";

NameTable[12].py="houfeng";

NameTable[13].py="hujiaming";

NameTable[14].py="huangjiaju";

NameTable[15].py="huanqingsong";

NameTable[16].py="jianghe";

NameTable[17].py="jinleicheng";

NameTable[18].py="libiao";

NameTable[19].py="liqi";

NameTable[20].py="lirenhua";

NameTable[21].py="liukai";

NameTable[22].py="louhanglin";

NameTable[23].py="luchaoming";

NameTable[24].py="luqiuwei";

NameTable[25].py="panhaijian";

NameTable[26].py="shuxiang";

NameTable[27].py="suxiaolei";

NameTable[28].py="sunyubo";

NameTable[29].py="wangwei";

for(i=0;i

for(j=0;*(p+j)!

='\0';j++)

s+=toascii(*(p+j));

NameTable[i].m=s;

}

}

voidCreateHashTable()y="\0";

HashTable[i].m=0;

HashTable[i].si=0;

}

for(i=0;i

{

intsum=1,j=0;

intadr=(NameTable[i].m)%P;i==0)=NameTable[i].m;

HashTable[adr].py=NameTable[i].py;

HashTable[adr].si=1;

}

elsei!

=0)

{

adr=(adr+d[j++])%HASH_LEN;=NameTable[i].m;y=NameTable[i].py;

HashTable[adr].si=sum;

}

}

}

voidDisplayNameTable()y,NameTable[i].m);

}

voidDisplayHashTable()y,HashTable[i].m,HashTable[i].si);

asl+=HashTable[i].si;

}

asl/=NAME_LEN;==s&&!

strcmp(HashTable[adr].py,name))y,s);

elseif(HashTable[adr].m==0)

printf("没有想要查找的人!

\n");

else

{

while

(1)

{

adr=(adr+d[j++])%HASH_LEN;==0)

{

printf("没有想要查找的人!

\n");

break;

}

if(HashTable[adr].m==s&&!

strcmp(HashTable[adr].py,name))

{

printf("\n姓名:

%s关键字:

%d查找长度为:

%d\n",HashTable[adr].py,s,sum);

break;

}

}

}

}

intmain()显示姓名表");

puts("\t\t\t2.显示哈希表");

puts("\t\t\t3.查找");

puts("\t\t\t4.退出");

puts("*----------------------------------------------------------------*");

restart:

printf("\n\t请选择:

");

scanf("%s",&a);

switch(a)//按照选择进行判断,直到选择退出时才能够退出

{

case'1':

DisplayNameTable();

break;

case'2':

DisplayHashTable();

break;

case'3':

FindName();

break;

case'4':

exit(0);

break;

default:

printf("\n请输入正确的选择!

\n");

gotorestart;

}

gotostart;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1