数据结构C++课程设计报告设计题目:1.为班级30个人的姓名设计一个哈希表,假设姓名用汉语拼音表示。
要求用除留余法构造哈希函数,用线性探测再散列法处理冲突,平均查找长度的上限为2。
2.建立一棵用二叉链表方式存储的二叉树,并对其进行先序遍历,打印输出结果。
3.编程实现以邻接表或邻接矩阵为存储结构,图的广度和深度优先搜索.专业计算机科学与技术班级计科103学号 201016021305学生姓名唐云山指导教师郑晓健设计时间 2010-2011学年上学期教师评分2011年 6月 14 日目录实验一实验目的————————————————————1 课程设计的组成部份———————————————1 课程设计进行过程及步骤—————————————4 所遇到的问题,你是怎样解决这些问题的——————4体会收获及建议—————————————————4参考资料(书、论文、网络资料)—————————4 教师评语————————————————————5 成绩—————————————————————5实验二实验目的————————————————————5 课程设计的组成部份———————————————5 课程设计进行过程及步骤—————————————7 所遇到的问题,你是怎样解决这些问题的——————7体会收获及建议—————————————————7参考资料(书、论文、网络资料)—————————8 教师评语————————————————————8 成绩—————————————————————8实验三实验目的————————————————————9 课程设计的组成部份———————————————9 课程设计进行过程及步骤—————————————15 所遇到的问题,你是怎样解决这些问题的——————16体会收获及建议—————————————————16参考资料(书、论文、网络资料)—————————16 教师评语————————————————————16 成绩—————————————————————16实验一1.概述1.1目的1.数据结构课程设计是在学完数据结构课程之后的实践教学环节。
该实践教学是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。
要求学生在设计中逐步提高程序设计能力,培养科学的软件工作方法。
学生通过数据结构课程设计在下述各方面得到锻炼:1.能根据实际问题的具体情况,结合数据结构课程中的基本理论和基本算法,正确分析出数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。
2.提高程序设计和调试能力。
学生通过上机实习,验证自己设计的算法的正确性。
学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。
3.培养算法分析能力。
分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。
1.2课程设计的组成部分#include<iostream>#include<string>using namespace std;#define M 47 //随机数#define n 50 //哈希表长#define q 30 //人数struct name{char *py;int k;};name NameList[n];struct hash{char *py;int k;int si;};hash hashlist[n];void listname(){char *f;int s0,r,i;NameList[0].py="baojie";NameList[1].py="chengaoyang"; NameList[2].py="chenguangzhong"; NameList[3].py="chenliangliang"; NameList[4].py="chenyongzhou"; NameList[5].py="fengchao"; NameList[6].py="gexiangfeng"; NameList[7].py="huting"; NameList[8].py="huangpinjin"; NameList[9].py="jiangxiaojia"; NameList[10].py="laidongjie"; NameList[11].py="liyexiao"; NameList[12].py="lidaohui"; NameList[13].py="lijue";NameList[14].py="lizhuoqun"; NameList[15].py="linfujun"; NameList[16].py="luobin"; NameList[17].py="luokeqing"; NameList[18].py="nichao"; NameList[19].py="panhuafeng"; NameList[20].py="sijun";NameList[21].py="songzhanhui"; NameList[22].py="sunzhengqing"; NameList[23].py="wanghaofeng"; NameList[24].py="wangjunshuai";NameList[25].py="wangqinde";NameList[26].py="wangzejun";NameList[27].py="wangkeke";NameList[28].py="weixing";NameList[29].py="wurenke";for(i=0;i<q;i++){s0=0;f=NameList[i].py;for(r=0;*(f+r)!='\0';r++)s0+=*(f+r);NameList[i].k=s0;}}void creathash(){int i;for(i=0;i<n;i++){hashlist[i].py="";hashlist[i].k=0;hashlist[i].si=0;}for(i=0;i<M;i++){int sum=0;int adr=(NameList[i].k)%M;int d=adr;if(hashlist[adr].si==0){hashlist[adr].k=NameList[i].k;hashlist[adr].py=NameList[i].py;hashlist[adr].si=1;}else{while(hashlist[d].k!=0){d=(d+NameList[i].k%10+1)%M;sum=sum+1;}hashlist[d].k=NameList[i].k;hashlist[d].py=NameList[i].py;hashlist[d].si=sum+1;}}}void findlist(){string nam;int s0=0,r,sum=1;cout<<"请输入姓名的拼音:"<<endl;cin>>nam;for(r=0;r<20;r++)s0+=nam[r];int adr=s0%M;int d=adr;if(hashlist[adr].k==s0)cout<<"姓名:"<<hashlist[adr].py<<" "<<"关键字:"<<s0<<" "<<"查找长度为:1"<<endl;else if(hashlist[adr].k==0)cout<<"无此记录!"<<endl;else{int g=0;while(g==0){d=(d+s0%10+1)%M;sum=sum+1;if(hashlist[d].k==0){cout<<"无此记录!"<<endl;g=1;}if(hashlist[d].k==s0){cout<<"姓名:"<<hashlist[adr].py<<" "<<"关键字:"<<s0<<" "<<"查找长度为:1"<<endl;g=1;}}}}void display(){int i;for(i=0;i<30;i++)cout<<NameList[i].py<<" "<<NameList[i].k<<endl; }int main(){char x;listname();creathash();cout<<"d. 显示哈希表f.查找任意键退出请选择"<<endl;while(cin>>x){if(x=='d'){display();cout<<endl;}else if(x=='f'){findlist();cout<<endl;}else break;}return 0;}3.总结3.1课程设计进行过程及步骤3.2所遇到的问题,你是怎样解决这些问题的查找过程中曾遇到输入不同的名字。
会显示相同的结果,说明哈希表函数还有待改进。
3.3体会收获及建议本程序思路比较简单,主要是对哈希表的建立,查找和输出,在写程序时最重要的是正确书写哈希函数和用伪随机探测再散列法外理冲突,真确处理可以有效减少查找长度,提高程序运行能力。