软件综合实习哈希表_软件综合实习

2020-02-28 实习报告 下载本文

软件综合实习哈希表由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“软件综合实习”。

哈希表的设计实验报告

1.实验题目

针对自己班级体中的“人名”设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序。

2.需求分析

假设人名为中国姓名的汉语拼音模式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构造,用链表法处理冲突。测试数据:

①输入的形式和输入值的范围:输入30个人的姓名拼音,即30个字符串。

②输出的形式:将结果输出,程序自动计算查找长度的总数和平均查找长度,然后用户可以根据需求进行查找操作。

③程序所能达到的功能:在哈希函数确定的前提下用各种不同处理冲突的方法,考察平均查找长度的变化和造好的哈希表中关键字的聚集性。

3.概要设计

#define HASH_LEN 50 //哈希表的长度 #define M 47 #define NAME_NO 30 //人名的个数 typedef struct NAME {char *py;//名字的拼音 int k;//拼音所对应的整数 }NAME;NAME NameList[HASH_LEN];typedef struct hterm //哈希表 {char *py;//名字的拼音 int k;//拼音所对应的整数 int si;//查找长度 }HASH;void InitNameList()void FindList()void Display()4.详细设计

1{for(int i=0;i

int s0=0;for(int r=0;r

int sum=1;int adr=s0 % M;//使用哈希函数 int d=adr;

if(HashList[adr].k==s0)//分3种情况进行判断

printf(“n姓名:%s 关键字:%d 查找长度为: 1”,HashList[d].py,s0);else if(HashList[adr].k==0)printf(“无该记录!”);else { int g=0;do { d=(d+s0%10+1)%M;//伪散列 sum=sum+1;if(HashList[d].k==0){ printf(“无记录!”);g=1;} if(HashList[d].k==s0){ printf(“n姓名:%s 关键字:%d 查找长度为:%d”,HashList[d].py,s0,sum);g=1;} }while(g==0);} void main(){ InitNameList();CreateHashList();while(1){ printf(“nn”);printf(“ 1.显示哈希表n”);printf(“ 2.查找n”);printf(“ 3.退出n”);err: char ch1;scanf(“%c”,&ch1);if(ch1=='1')Display();else if(ch1=='2')FindList();else if(ch1=='3')return;else { printf(“n请输入正确的选择!”);goto err;} } } 5.调试分析

测试数据:随机输入的30个人的姓名拼音

测试过程:输入30个人的姓名拼音,观察输出结果,并进行查找操作 测试结果: 6.使用说明

1)进入界面选择1显示哈希表,选择2为查找,选择3退出 2)再输入名字查找,再退出 7.测试结果

8.附录

#include #include #include //#include #define HASH_LEN 50 //哈希表的长度 #define M 47 #define NAME_NO 30 //人名的个数 typedef struct NAME { char *py;//名字的拼音

int k;//拼音所对应的整数 }NAME;NAME NameList[HASH_LEN];

typedef struct hterm //哈希表 { char *py;//名字的拼音

int k;//拼音所对应的整数 int si;//查找长度 }HASH;HASH HashList[HASH_LEN];void InitNameList(){ NameList[0].py=“chenghongxiu”;NameList[1].py=“yuanhao”;NameList[2].py=“yangyang”;NameList[3].py=“zhanghen”;NameList[4].py=“chenghongxiu”;NameList[5].py=“xiaokai”;NameList[6].py=“liupeng”;NameList[7].py=“shenyonghai”;NameList[8].py=“chengdaoquan”;NameList[9].py=“ludaoqing”;NameList[10].py=“gongyunxiang”;NameList[11].py=“sunzhenxing”;NameList[12].py=“sunrongfei”;NameList[13].py=“sunminglong”;NameList[14].py=“zhanghao”;NameList[15].py=“tianmiao”;NameList[16].py=“yaojianzhong”;NameList[17].py=“yaojianqing”;NameList[18].py=“yaojianhua”;NameList[19].py=“yaohaifeng”;NameList[20].py=“chengyanhao”;NameList[21].py=“yaoqiufeng”;NameList[22].py=“qianpengcheng”;NameList[23].py=“yaohaifeng”;NameList[24].py=“bianyan”;NameList[25].py=“linglei”;NameList[26].py=“fuzhonghui”;NameList[27].py=“huanhaiyan”;NameList[28].py=“liudianqin”;NameList[29].py=“wangbinnian”;char *f;int r,s0;for(int i=0;i

for(r=0;*(f+r)!= '';r++)//方法:将字符串的各个字符所对应的ASCII码相加,所得的整数做为哈希表的关键字 s0=*(f+r)+s0;NameList[i].k=s0;} } void CreateHashList(){ for(int i=0;i

HashList[d].k=NameList[i].k;HashList[d].py=NameList[i].py;HashList[d].si=sum+1;}i++;} void FindList(){ printf(“nn请输入姓名的拼音: ”);//输入姓名 char name[20]={0};scanf(“%s”,name);

int s0=0;for(int r=0;r

int sum=1;int adr=s0 % M;//使用哈希函数 int d=adr;

if(HashList[adr].k==s0)//分3种情况进行判断

printf(“n姓名:%s 关键字:%d 查找长度为: 1”,HashList[d].py,s0);else if(HashList[adr].k==0)printf(“无该记录!”);else { int g=0;do { d=(d+s0%10+1)%M;//伪散列 sum=sum+1;if(HashList[d].k==0){ printf(“无记录!”);g=1;} if(HashList[d].k==s0){ printf(“n姓名:%s 关键字:%d 查找长度为:%d”,HashList[d].py,s0,sum);g=1;} }while(g==0);} } void Display(){ printf(“nn地址t关键字tt搜索长度tH(key)tt拼音 n”);//显示的格式 for(int i=0;i

float average=0;for(i=0;i

printf(“n------------------------哈希表的建立和查找----------------------”);InitNameList();CreateHashList();

while(1){ printf(“nn”);printf(“ 1.显示哈希表n”);printf(“ 2.查找n”);printf(“ 3.退出n”);

err: char ch1;scanf(“%c”,&ch1);if(ch1=='1')Display();else if(ch1=='2')FindList();else if(ch1=='3')return;else { printf(“n请输入正确的选择!”);goto err;} } }

《软件综合实习哈希表.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
软件综合实习哈希表
点击下载文档
相关专题 软件综合实习 综合 软件 哈希表 软件综合实习 综合 软件 哈希表
[实习报告]相关推荐
    [实习报告]热门文章
      下载全文