数据结构课程设计江西理工文档格式.docx
- 文档编号:20094681
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:34
- 大小:358.19KB
数据结构课程设计江西理工文档格式.docx
《数据结构课程设计江西理工文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计江西理工文档格式.docx(34页珍藏版)》请在冰豆网上搜索。
clock_tstart,finish在程序开始执行部分插入start=clock();
结束处插入finish=clock();
intisKeyWords(char*word)判断是否是关键字最后由duration=(double)(finish-start)/CLOCKS_PER_SEC;
可得程序执行的时间。
b.文件处理函数文件处理函数功能:
主要过滤掉C+源文件中的注释,换行,空格等字符intRead(char*filename)charwordMAXLEN,ch,ch1;
inti;
FILE*read;
if(read=fopen(filename,r)=NULL)printf(n文件不存在,请确认好再输入!
);
return-1;
while(!
feof(read)i=0;
ch=fgetc(read);
if(ch=/)ch1=fgetc(read);
if(ch1=/)while(ch1!
=n)ch1=fgetc(read);
elseif(ch1=*)ch1=fgetc(read);
while(ch1!
=*)ch1=fgetc(read);
if(ch1=*)ch=fgetc(read);
if(ch=/)break;
while(isLetter(ch)=0&
feof(read)=0)ch=fgetc(read);
while(isLetter(ch)=1&
feof(read)=0)if(i=MAXLEN)while(isLetter(ch)=1&
i=0;
break;
elsewordi+=ch;
wordi=0;
if(isKeyWords(word)CreatHX(word);
fclose(read);
c.输出文件函数输出文件函数功能:
将得到的源文件中关键字及其频度导出到文件中voidOUT_FILE(char*filename)FILE*fp=fopen(filename,w);
for(i=0;
iHASHLEN;
i+)if(HSi.keyword!
=&
HSi.count!
=0)fprintf(fp,%s:
%-3dn,HSi.keyword,HSi.count);
fclose(fp);
D.计算相似度把两个源文件的关键字数分别存入两个数组a18,b18中然后对数组进行其模操作等:
相似度:
S=arryMod(c)/arryMod(b)*arryMod(a);
intarrySub(intarry118,intarry218,intarry18)/两个数组相减inti=0;
for(;
i18;
i+)arryi=arry1i-arry2i;
floatarryMod(intarry3)/对数组求模floatMod;
intmod=0;
i+)mod=mod+arryi*arryi;
Mod=sqrt(mod);
return(Mod);
调试分析调试分析1.调试过程中遇到的问题调试过程中遇到的问题1.开始程序编写代码的时候只初始化一个哈希表,关于哈希表的几个函数都没有设置hash这个形参,直接用了已经初始化了的hash表,但是程序要读取两个源文件,所以面临着问题。
开始时针对源程序大量修改,增加hash形参,后面因为函数调用指针变量出现不能转换问题,所以又再次出现问题。
后来,想到可以每次处理完一个C+源文件后把所有的结果存入一个数组中,之后将哈希表清空,继续第二个源文件的读入并存入另外一个数组中,在后续计算相似度S时候直接对两个数组进行操作即可。
2.在编写函数floatarryMod(intarry3)的时候开始没有考虑类型问题结果导致结果与预期的不一样2.算法的时空分析算法的时空分析程序中采用数组存放所获得的各个关键字的频度消耗的内存空间较大,还有哈希函数的移植性不够,改进设想是首先直接对哈希表进行操作,少去数组这一中间变量。
哈希函数全部改为移植性高的带hash形参的函数。
3.经验和体会经验和体会通过这次长达一周多的课程设计,首先学习了怎样去分析一个问题,写出算法,开始编写代码这一过程。
知识点方面,学习了部分c+语言,学会怎样利用文件流读取和导出文件,测试结果测试结果环境:
c-free5.0Editplus在保存源文件的目录下必须存在两个C+源文件;
1.cpp2.cpp程序运行后的主界面:
选择1,输入1.再输入1.cpp再重复步骤:
1,输入2.cpp返回主界面:
输入2计算输入3.计算程序执行所用的时间:
参考文献:
C程序设计(第三版)谭浩强数据结构(C语言版)严蔚敏,吴伟民C+语言程序设计(第3版)源代码附录:
源代码附录:
#include#include#include#include#include#include#include#defineTOTAL18#defineMAXLEN10#defineHASHLEN18#defineM20typedefstructcharkeywordMAXLEN;
intcount;
intcon;
HASH;
intcont=0;
charKeyWordsTOTALMAXLEN=char,do,double,else,float,for,if,int,long,return,short,sizeof,static,struct,switch,typedef,void,while;
HASHHSHASHLEN;
voidShow(intkey);
voidHSclear();
inta18,b18;
intarrySub(intarry118,intarry218,intarry18)inti=0;
floatarryMod(intarry3)floatMod;
intRead(char*filename);
intisLetter(charch);
intisKeyWords(char*word);
intFindHX(char*keyword);
intCreatHX(char*keyword);
intGetFreePos(intkey);
intGetKey(char*keyword);
voidHSclear()inti;
i=HASHLEN;
i+)HSi.count=0;
cont=0;
voidOUT_FILE(char*filename)FILE*fp=fopen(filename,w);
i=a&
ch=A&
ch=a&
ch=z)return1;
elsereturn0;
intFindHX(char*keyword)intkey,find,tem=0;
if(!
isKeyWords(keyword)return-1;
key=GetKey(keyword);
if(strcmp(HSkey.keyword,keyword)=0)returnkey;
for(find=key+1;
findHASHLEN;
find+)tem+;
if(strcmp(HSfind.keyword,keyword)=0)HSfind.con=tem;
returnfind;
for(find=0;
find0)if(strcmp(HSkey.keyword,keyword)=0)HSkey.count+;
return1;
key=FindHX(keyword);
if(key0)key=GetFreePos(GetKey(keyword);
if(key0)return-1;
strcpy(HSkey.keyword,keyword);
HSkey.count+;
elsestrcpy(HSkey.keyword,keyword);
intGetFreePos(intkey)intfind,tem=0;
if(key=HASHLEN)return-1;
if(strlen(HSfind.keyword)=0)HSfind.con=tem;
findkey;
voidShow(intkey)if(key=HASHLEN)printf(关键字不存在!
n);
return;
if(strlen(HSkey.keyword)=0)return;
printf(t%-11s%dn,HSkey.keyword,HSkey.count);
cont+;
intGetKey(char*keyword)return(keyword0*100+keywordstrlen(keyword)-1)%18;
intisKeyWords(char*word)intlow,high,mid;
low=0;
high=M-1;
while(low=high)mid=(low+high)/2;
if(strcmp(word,KeyWordsmid)=0)return
(1);
if(strcmp(word,KeyWordsmid)=-1)high=mid-1;
elselow=mid+1;
return(0);
intmain()clock_tstart,finish;
doubleduration;
charorz;
inti,count,key,has;
charfilename128,wordMAXLEN;
intno,no_1,no_2;
intflag=1,flag_1=1,flag_2=1;
start=clock();
while(flag)cout*endl;
cout
(1)开放地址法endl;
cout
(2)链地址法endl;
cout(3)退出系统endl;
cout*endl;
coutno;
switch(no)case1:
system(cls);
while(flag_1)coutendl;
cout*开放地址法*endl;
cout
(1)识别并统计关键字频度endl;
cout
(2)计算相对距离sendl;
cout(3)开放地址法执行时间endl;
cout(4)返回主界面endl;
coutno_1;
switch(no_1)case1:
printf(请输入源文件名:
scanf(%s,&
filename);
Read(filename);
printf(n文件读取成功!
if(strcmp(filename,1.cpp)=0)OUT_FILE(OutFile1.txt);
i+)Show(i);
ai=HSi.count;
getchar();
HSclear();
elseOUT_FILE(OutFile2.txt);
bi=HSi.count;
finish=clock();
duration=(double)(finish-start)/CLOCKS_PER_SEC;
printf(按任意键返回:
case2:
floatS;
intc18;
arrySub(b,a,c);
printf(相似度为:
printf(%f,S);
getch();
case3:
printf(链地址法执行的时间为:
printf(%fmsn,duration);
case4:
flag_1=0;
while(flag_2)coutendl;
cout*链地址法*endl;
cout(3)链地址法执行时间endl;
coutno_2;
switch(no_2)case1:
printf(关键字统计完毕,已导出文件:
printf(相似度:
S=14.6554);
printf(开放地址法执行时间:
t=5.021783ms);
flag_2=0;
flag=0;
cout*你好!
再见*next)printf(编号(成绩):
%d(%d)t,p-no,p-total);
功能:
输出函数,将应聘者的编号、成绩输出3.插入函数插入函数/参数p是指向已知队列的首指针的指针,参数u是要插入的新结点的指针voidinsert(STU*p,STU*u)STU*v,*q;
for(q=*p;
q!
=NULL;
v=q,q=q-next)if(q-sortmsortm)break;
if(q=*p)*p=u;
elsev-next=u;
u-next=q;
将应聘者按成绩高低用链表连接起来调试分析:
调试分析:
1.调试过程中遇到的问题调试过程中遇到的问题a.最开始想的是先把员工的信息导入到线性表中,没有考虑到有顺序的存储,这将复杂化后续的工作b.在将数据插入到表中的时候,开始没有有效的利用表头的性质,导致插入过程有些错乱。
2.算法的时空分析算法的时空分析程序中无论是公司计划还是应聘者的信息都是通过用户在dos界面手动输入,改进设想是弄两个文件分别记录公司计划招聘的人数和应聘者的基本信息。
从而减少输入的麻烦。
程序中如果利用双向队列执行效率会更高。
3.经验和体会经验和体会通过这次长达一周多的课程设计,首先学习了怎样去分析一个问题,写出算法,开始编写代码这一过程。
知识点方面,学习了部分c+语言,熟练掌握了队列的基本操作。
测试结果环境:
c-free5.0运行后程序如下选择1输入工种和对应的计划招聘人数回车选择2输入应聘者的人数和相关信息:
回车选择3回车选择4回车选择0退出!
C程序设计(第三版)谭浩强数据结构(C语言版)严蔚敏,吴伟民源代码附录:
#include#include#defineM20#defineDEMARK5typedefstructstuintno,total,z2,sortm,zi;
structstu*next;
STU;
structrzmodeintlmt,count;
STU*next;
rzM;
STU*head=NULL,*over=NULL;
intall;
voidprint(STU*p)for(;
p!
p=p-next)printf(编号:
%dt成绩:
%dn,p-no,p-total);
voidinsert(STU*p,STU*u)STU*v,*q;
intmain()intzn,i,no,total,z1,z2,g,m=1;
charw,choice;
STU*p,*v,*q;
while(m)printf(n);
printf(n招聘模拟系统n);
printf(*);
printf(n1.);
printf(n2.);
printf(n3.);
printf(n4.);
printf(n0.);
printf(n请输入对应的操作系列号:
scanf(%c,&
choice);
switch(choice)case1:
printf(请输入工种数:
scanf(%d,&
zn);
for(all=0,i=1;
i=zn;
i+)printf(第%d个工种计划招聘的人数:
i);
rzi.lmt);
rzi.count=0;
rzi.next=NULL;
all+=rzi.lmt;
printf(请输入应聘者人数:
g);
printf(请输入应聘者的基本信息:
printf(编号t成绩t第一志愿所报工种t第二志愿所报工种n);
for(i=1;
ino=no;
p-total=p-sortm=total;
p-zi=0;
p-z0=z1;
p-z1=z2;
insert(&
head,p);
all&
head!
)p=head;
head=head-next;
if(rzp-zp-zi.countzp-zi.lmt)rzp-zp-zi.count+;
rzp-zp-zi.next,p);
all-;
continue;
if(p-zi=1)p-next=over;
over=p;
p-sortm-=DEMARK;
p-zi+;
i+)printf(第%d个工种录取者的信息如下:
n,i);
print(rzi.next);
printf(n);
printf(落选者编号(成绩):
print(head);
print(over);
case0:
m=0;
default:
;
if(choice=1|choice=2|choice=3|choice=4)printf(ntt按回车键继续,按任意键返回主菜单.n);
w=getchar();
if(w!
=xA)getchar();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 江西 理工