数据结构课程设计报告撰写模板参考.docx
《数据结构课程设计报告撰写模板参考.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告撰写模板参考.docx(7页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告撰写模板参考
数据结构课程设计报告撰写模板参考
1.1输入的形式和输入值的范围
1.2输出的形式
1.3程序所能达到的功能
1.4测试数据:
包括正确的输入及其输出结果和含有错误的输入及其输出结果
3.1姓名(结构体数组)初始化………………………………………………………………………………
3.2建立哈希表……………………………………………………………………………………………………….
3.2.1用除留余数法构建哈希函数………………………………………………………………………………..
3.2.2用伪随机探测再散列法处理冲突……………………………………………………………………….
1需求分析
以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?
并明确规定:
1.1输入的形式和输入值的范围;
1.2输出的形式;
1.3程序所能达到的功能;
1.4测试数据:
包括正确的输入及其输出结果和含有错误的输入及其输出结果。
2概要设计(系统概要、基本功能要求)
说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。
存储结构设计
typedefstruct
{char*py;//名字的拼音
intk;//拼音所对应的整数
}NAME;
typedefstruct//哈希表
{char*py;//名字的拼音
intk;//拼音所对应的整数
intsi;//查找长度
}HASH;
3详细设计(列出函数首部+注释)
例如:
voidshow(listlinkhead)/*显示所有的信息*/
实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其它模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:
按照伪码算法能够在计算机键盘直接输入高级程序设计语言程序);可采用流程图N–S图或PAD图进行描述,画出函数和过程的调用关系图。
3.1姓名(结构体数组)初始化
名字以拼音的形式够成字符串,将字符串的各个字符所对应的ASCII码相加,所得的整数做为哈希表的关键字。
voidInitNameList()
{char*f;
intr,s0,i;
NameList[0].py="zengqinghui";
NameList[1].py="mayuelong";
NameList[2].py="chenzhicheng";
NameList[3].py="sunpeng";
NameList[4].py="wanghui";
NameList[5].py="liqingbo";
NameList[6].py="liujunpeng";
NameList[7].py="jiangquanlei";
NameList[8].py="xingzhengchuan";
NameList[9].py="luzhaoqian";
NameList[10].py="gaowenhu";
NameList[11].py="zhuhaoyin";
NameList[12].py="chenlili";
NameList[13].py="wuyunyun";
NameList[14].py="huangjuanxia";
NameList[15].py="wangyan";
NameList[16].py="zhoutao";
NameList[17].py="jiangzhenyu";
NameList[18].py="liuxiaolong";
NameList[19].py="wangziming";
NameList[20].py="fengjunbo";
NameList[21].py="lilei";
NameList[22].py="wangjia";
NameList[23].py="zhangjianguo";
NameList[24].py="zhuqingqing";
NameList[25].py="huangmin";
NameList[26].py="haoyuhan";
NameList[27].py="zhoutao";
NameList[28].py="zhujiang";
NameList[29].py="lixiaojun";
for(i=0;i{s0=0;
f=NameList[i].py;
for(r=0;*(f+r)!
='\0';r++)*/将字符串的各个字符所对应的ASCII码相加,所得的整数做为哈希表的关键字*/
s0=*(f+r)+s0;
NameL
ist[i].k=s0;
}
}
3.2建立哈希表
3.2.1用除留余数法构建哈希函数
3.2.2用伪随机探测再散列法处理冲突
voidCreateHashList()
{inti;
for(i=0;i{HashList[i].py="";
HashList[i].k=0;
HashList[i].si=0;
}
for(i=0;i{intsum=0;
intadr=(NameList[i].k)%M;//哈希函数
intd=adr;
if(HashList[adr].si==0)//如果不冲突
{HashList[adr].k=NameList[i].k;
HashList[adr].py=NameList[i].py;
HashList[adr].si=1;
}
else//冲突
{do
{d=(d+NameList[i].k%10+1)%M;//伪随机探测再散列法处理冲突
sum=sum+1;//查找次数加1
}while(HashList[d].k!
=0);
HashList[d].k=NameList[i].k;
HashList[d].py=NameList[i].py;
HashList[d].si=sum+1;
}
}
}
3.3查找哈希表
在哈希表中进行查找,输出查找的结果和关键字,并计算和输出查找成功的平均查找长度
voidFindList()
{charname[20]={0};
ints0=0,r,sum=1,adr,d;
printf("请输入姓名的拼音:
");
scanf("%s",name);
for(r=0;r<20;r++)//求出姓名的拼音所对应的整数(关键字)
s0+=name[r];
adr=s0%M;//使用哈希函数
d=adr;
if(HashList[adr].k==s0)//分3种情况进行判断
printf("\n姓名:
%s关键字:
%d查找长度为:
1",HashList[d].py,s0);
elseif(HashList[adr].k==0)
printf("无此记录!
");
else
{intg=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);
}
}
3.4显示哈希表
显示哈希表的的格式:
\n地址\t关键字\t\t搜索长度\tH(key)\t姓名\n
voidDisplay()
{inti;
floataverage=0;
printf("\n地址\t关键字\t\t搜索长度\tH(key)\t姓名\n");//显示的格式
for(i=0;i<50;i++)
{printf("%d",i);
printf("\t%d",HashList[i].k);
printf("\t\t%d",HashList[i].si);
printf("\t\t%d",HashList[i].k%M);
printf("\t%s",HashList[i].py);
printf("\n");
}
for(i=0;iaverage+=HashList[i].si;
average/=NAME_NO;
printf("\n平均查找长度:
ASL(%d)=%f\n",NAME_NO,average);
}
3.5主函数设计
voidmain()
{charch1;
InitNameList();
CreateHashList();
do
{printf("D.显示哈希表\nF.查找\nQ.退出\n请选择:
");
cin>>&ch1;
switch(ch1)
{
case'D':
Display();cout<case'F':
FindList();cout<case'Q':
exit(0);
}
cout<<"comeon!
(y/n):
";
cin>>&ch1;
}while(ch1!
='n');
}
4调试分析
内容包括:
4.1调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析;
题目中明确规定了用除留余数法创立哈希函数和用伪随机探测再散列法处理冲突,程序设计的方法几乎已经被规定,只要按照题目要求写程序不会太难。
不过在写程序过程中还是发现了一些小问题,主要是因为自己上机试验少,以后多上机实践能够避免的。
b.算法的时空分析(包括基本操作和其它算法的时间复杂度和空间复杂度的分析)和 改进设想;
c.经验和体会等。
5用户使用说明
说明如何使用你编写的程序,详细列出每一步的操作步骤。
6测试结果
列出你的测试结果,包括输入和输出。
这里的测试数据应该完整和严格,最好多于需求分析中所列。
7参考文献
列出参考的相关资料和书籍。