排序算法性能分析说明书.docx
《排序算法性能分析说明书.docx》由会员分享,可在线阅读,更多相关《排序算法性能分析说明书.docx(22页珍藏版)》请在冰豆网上搜索。
排序算法性能分析说明书
*******************
实践教学
兰州理工大学
计算机与通信学院
2012年春季学期
数据结构课程设计
题目:
排序算法性能分析
专业班级:
计算机科学与技术
姓名:
魏志强
学号:
10500118
指导教师:
张永
成绩:
_________________
目录
摘要1
1.采用类c语言定义相关的数据类型4
2.各模块的伪码算法5
3.函数的调用关系图11
4.调试分析11
5.测试结果13
6.源程序(带注释)16
总结28
参考文献29
致谢30
附件Ⅰ部分源程序代码31
摘要
排序是计算机程序设计中的一种重要操作。
各种部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。
关键字:
排序,性能分析。
排序:
计算机内正常进行的一种操作,其目的是将一组"无序"的纪录序列调整为"有序"的纪录序列.其分为内部排序与外部排序.内部排序的过程是一个逐步扩大记录的有序序列长度的过程.内排序的方法有多种,按照所用策略的不同,可归纳为5类:
插入排序,选择排序,快速排序,希尔排序,冒泡排序.
性能分析:
通过输入相同的数组对不同的排序法则从得出的排序的比较次数,移动次数,从而比较各分析排序的优虐.
1.采用类c语言定义相关的数据类型
Int整型,inta[100]:
定义一个整形变量其容量为100.intn,intct,intmt,inttemp.char字符型
2.各模块的伪码算法
(1)插入排序伪码算法:
VoidInsertSort(Splist&L){
For(i=2;i<=L.length;++i)
If(LT(L.r[i].key,L.r[i-1].key)) //“《”,须将L.r[i]插入有序子表
{L.r[0]=L.r[i]; //复制为哨兵
L.r[i]=L.r[i-1];
For(j)i-2;LT(L.r[0].key,L.r[j].key);--j)
L.r[j+1]=L.r[j]; //记录后移
L.r[j+1]=L.r[0];//插入到正确位置
}
}//InsertSort
(2)希尔排序
VoidshllInsert(Splist&L,intdk){
For(i=dk+1;i<=L.length;++i)
If(LT(L.r[i].key,L.r[i-dk].key)) {
L.r[0]=L.r[i]; //暂存
For(j=i-dk;j>0&<(L.r0].key,L.r[j].key);j-=dk)
L.r[j+dk]=L.r[j]; //记录后移
L.r[j+dk]=L.r[0];}//插入
}//shellsort
Voidshllsort(Splist&L,intdata[],intt){
For(k=0;kshllInsert(L,data[k]);}//shellsort(3)快速排序Intpart(sqlist&L,intlow,inthigh){//交换顺序表L中子表L。R[low..high]的记录,使枢轴记录到位,并返回其所在位 // 此时在它之前(后)的记录均不大(小)于它。Pivotkey=L.[Low].key;While(loeWhile(low=pivotkey)--high;L.r[lowL.r[high];While(low=pivotkey)++low;L.r[lowL.r[high];}Returnlow}//partition(4)选择排序Voidselectsort(splist&L){For(i=1;iJ=selectMinKey(L,i);If(i!=j)L.r[i]L.r[j];}}//selectsort(5)其泡排序Voidbubblesort(sqlistr,intn){IntI,j,w;For(i=1;i<=n-1;i++)For(j=n;j>=i+1;j--)If(r[j].key{ W=r[j];R[j]=r[j-1];R[j-1]=w;}3.函数的调用关系图 MainInsertionsortquicksortbubblesortselectionsortshellsort Output比较ct.mt次数 4.调试分析a、调试中遇到的问题及对问题的解决方法刚开始进行输入时,对有些排序不能实现,我就对不能实现的排序进行分析,对产生的语法错误进行了及时的改正,以至所有的排序算法能够顺利的实现。b、算法的时间复杂度和空间复杂度算法的时间复杂度分别是O(n2),O(nlog2n),O(log2n),5.调试结果2345613813212453946371002006.源程序:#include#defineN100//定义数组最大为100constintt=3;//定义希尔排序次数intd[3]={4,3,1};//定义希尔排序比较量intqmt;//快速排序的移动次数intqct;//快速排序的比较次数voidoutput(intn,inta[],intct,intmt)//内部排序中调用的输出函数{inti;printf("\n排序结果:");for(i=0;iprintf("%d",a[i]);//输出各排序完成的数组printf("\n比较次数:%d\n",ct);//输出各排序比较次数printf("移动次数:%d\n\n",mt);//输出各排序移动次数}voidbubble_sort(intn,intA[])//冒泡排序{intmt=0;//移动次数mt=movetimeintct=0;//比较次数ct=cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{for(j=0;j{if(a[j+1]temp=a[j],a[j]=a[j+1],a[j+1]=temp,mt+=3;//关键字交换计为3次移动}}printf("冒泡排序");output(n,a,ct,mt);}voidselection_sort(intn,intA[])//选择排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp,k;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{k=i;for(j=i+1;jif(a[k]>a[j])k=j;temp=a[i],a[i]=a[k],a[k]=temp,mt+=3;//关键字交换计为3次移动}printf("选择排序");output(n,a,ct,mt);}voidquick(inta[],intlow,intup)//快速排序递归算法{inti,j,temp;if(low{i=low;j=up;temp=a[low],qmt++;while(i!=j){qct++;while(itemp)j--,qct++;if(ia[i++]=a[j],qct++;qmt++;while(ii++,qct++;if(ia[j--]=a[i],qct++,qmt++;}a[i]=temp,qmt++;quick(a,low,j-1);quick(a,i+1,up);}}voidquick_sort(intn,intA[])//快速排序(通过调用快速排序递归算法完成){inti;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)quick(a,0,n-1);//调用快速排序递归算法printf("快速排序");output(n,a,qct,qmt);}voidinsertion_sort(intn,intA[])//插入排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=1;i{temp=a[i],mt++;for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
shllInsert(L,data[k]);
(3)快速排序
Intpart(sqlist&L,intlow,inthigh){
//交换顺序表L中子表L。
R[low..high]的记录,使枢轴记录到位,并返回其所在位
// 此时在它之前(后)的记录均不大(小)于它。
Pivotkey=L.[Low].key;
While(loeWhile(low=pivotkey)--high;L.r[lowL.r[high];While(low=pivotkey)++low;L.r[lowL.r[high];}Returnlow}//partition(4)选择排序Voidselectsort(splist&L){For(i=1;iJ=selectMinKey(L,i);If(i!=j)L.r[i]L.r[j];}}//selectsort(5)其泡排序Voidbubblesort(sqlistr,intn){IntI,j,w;For(i=1;i<=n-1;i++)For(j=n;j>=i+1;j--)If(r[j].key{ W=r[j];R[j]=r[j-1];R[j-1]=w;}3.函数的调用关系图 MainInsertionsortquicksortbubblesortselectionsortshellsort Output比较ct.mt次数 4.调试分析a、调试中遇到的问题及对问题的解决方法刚开始进行输入时,对有些排序不能实现,我就对不能实现的排序进行分析,对产生的语法错误进行了及时的改正,以至所有的排序算法能够顺利的实现。b、算法的时间复杂度和空间复杂度算法的时间复杂度分别是O(n2),O(nlog2n),O(log2n),5.调试结果2345613813212453946371002006.源程序:#include#defineN100//定义数组最大为100constintt=3;//定义希尔排序次数intd[3]={4,3,1};//定义希尔排序比较量intqmt;//快速排序的移动次数intqct;//快速排序的比较次数voidoutput(intn,inta[],intct,intmt)//内部排序中调用的输出函数{inti;printf("\n排序结果:");for(i=0;iprintf("%d",a[i]);//输出各排序完成的数组printf("\n比较次数:%d\n",ct);//输出各排序比较次数printf("移动次数:%d\n\n",mt);//输出各排序移动次数}voidbubble_sort(intn,intA[])//冒泡排序{intmt=0;//移动次数mt=movetimeintct=0;//比较次数ct=cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{for(j=0;j{if(a[j+1]temp=a[j],a[j]=a[j+1],a[j+1]=temp,mt+=3;//关键字交换计为3次移动}}printf("冒泡排序");output(n,a,ct,mt);}voidselection_sort(intn,intA[])//选择排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp,k;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{k=i;for(j=i+1;jif(a[k]>a[j])k=j;temp=a[i],a[i]=a[k],a[k]=temp,mt+=3;//关键字交换计为3次移动}printf("选择排序");output(n,a,ct,mt);}voidquick(inta[],intlow,intup)//快速排序递归算法{inti,j,temp;if(low{i=low;j=up;temp=a[low],qmt++;while(i!=j){qct++;while(itemp)j--,qct++;if(ia[i++]=a[j],qct++;qmt++;while(ii++,qct++;if(ia[j--]=a[i],qct++,qmt++;}a[i]=temp,qmt++;quick(a,low,j-1);quick(a,i+1,up);}}voidquick_sort(intn,intA[])//快速排序(通过调用快速排序递归算法完成){inti;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)quick(a,0,n-1);//调用快速排序递归算法printf("快速排序");output(n,a,qct,qmt);}voidinsertion_sort(intn,intA[])//插入排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=1;i{temp=a[i],mt++;for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
While(low=pivotkey)--high;
L.r[lowL.r[high];
While(low=pivotkey)++low;
Returnlow
}//partition
(4)选择排序
Voidselectsort(splist&L){
For(i=1;iJ=selectMinKey(L,i);If(i!=j)L.r[i]L.r[j];}}//selectsort(5)其泡排序Voidbubblesort(sqlistr,intn){IntI,j,w;For(i=1;i<=n-1;i++)For(j=n;j>=i+1;j--)If(r[j].key{ W=r[j];R[j]=r[j-1];R[j-1]=w;}3.函数的调用关系图 MainInsertionsortquicksortbubblesortselectionsortshellsort Output比较ct.mt次数 4.调试分析a、调试中遇到的问题及对问题的解决方法刚开始进行输入时,对有些排序不能实现,我就对不能实现的排序进行分析,对产生的语法错误进行了及时的改正,以至所有的排序算法能够顺利的实现。b、算法的时间复杂度和空间复杂度算法的时间复杂度分别是O(n2),O(nlog2n),O(log2n),5.调试结果2345613813212453946371002006.源程序:#include#defineN100//定义数组最大为100constintt=3;//定义希尔排序次数intd[3]={4,3,1};//定义希尔排序比较量intqmt;//快速排序的移动次数intqct;//快速排序的比较次数voidoutput(intn,inta[],intct,intmt)//内部排序中调用的输出函数{inti;printf("\n排序结果:");for(i=0;iprintf("%d",a[i]);//输出各排序完成的数组printf("\n比较次数:%d\n",ct);//输出各排序比较次数printf("移动次数:%d\n\n",mt);//输出各排序移动次数}voidbubble_sort(intn,intA[])//冒泡排序{intmt=0;//移动次数mt=movetimeintct=0;//比较次数ct=cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{for(j=0;j{if(a[j+1]temp=a[j],a[j]=a[j+1],a[j+1]=temp,mt+=3;//关键字交换计为3次移动}}printf("冒泡排序");output(n,a,ct,mt);}voidselection_sort(intn,intA[])//选择排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp,k;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{k=i;for(j=i+1;jif(a[k]>a[j])k=j;temp=a[i],a[i]=a[k],a[k]=temp,mt+=3;//关键字交换计为3次移动}printf("选择排序");output(n,a,ct,mt);}voidquick(inta[],intlow,intup)//快速排序递归算法{inti,j,temp;if(low{i=low;j=up;temp=a[low],qmt++;while(i!=j){qct++;while(itemp)j--,qct++;if(ia[i++]=a[j],qct++;qmt++;while(ii++,qct++;if(ia[j--]=a[i],qct++,qmt++;}a[i]=temp,qmt++;quick(a,low,j-1);quick(a,i+1,up);}}voidquick_sort(intn,intA[])//快速排序(通过调用快速排序递归算法完成){inti;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)quick(a,0,n-1);//调用快速排序递归算法printf("快速排序");output(n,a,qct,qmt);}voidinsertion_sort(intn,intA[])//插入排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=1;i{temp=a[i],mt++;for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
J=selectMinKey(L,i);
If(i!
=j)L.r[i]L.r[j];
}//selectsort
(5)其泡排序
Voidbubblesort(sqlistr,intn){
IntI,j,w;
For(i=1;i<=n-1;i++)
For(j=n;j>=i+1;j--)
If(r[j].key{ W=r[j];R[j]=r[j-1];R[j-1]=w;}3.函数的调用关系图 MainInsertionsortquicksortbubblesortselectionsortshellsort Output比较ct.mt次数 4.调试分析a、调试中遇到的问题及对问题的解决方法刚开始进行输入时,对有些排序不能实现,我就对不能实现的排序进行分析,对产生的语法错误进行了及时的改正,以至所有的排序算法能够顺利的实现。b、算法的时间复杂度和空间复杂度算法的时间复杂度分别是O(n2),O(nlog2n),O(log2n),5.调试结果2345613813212453946371002006.源程序:#include#defineN100//定义数组最大为100constintt=3;//定义希尔排序次数intd[3]={4,3,1};//定义希尔排序比较量intqmt;//快速排序的移动次数intqct;//快速排序的比较次数voidoutput(intn,inta[],intct,intmt)//内部排序中调用的输出函数{inti;printf("\n排序结果:");for(i=0;iprintf("%d",a[i]);//输出各排序完成的数组printf("\n比较次数:%d\n",ct);//输出各排序比较次数printf("移动次数:%d\n\n",mt);//输出各排序移动次数}voidbubble_sort(intn,intA[])//冒泡排序{intmt=0;//移动次数mt=movetimeintct=0;//比较次数ct=cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{for(j=0;j{if(a[j+1]temp=a[j],a[j]=a[j+1],a[j+1]=temp,mt+=3;//关键字交换计为3次移动}}printf("冒泡排序");output(n,a,ct,mt);}voidselection_sort(intn,intA[])//选择排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp,k;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{k=i;for(j=i+1;jif(a[k]>a[j])k=j;temp=a[i],a[i]=a[k],a[k]=temp,mt+=3;//关键字交换计为3次移动}printf("选择排序");output(n,a,ct,mt);}voidquick(inta[],intlow,intup)//快速排序递归算法{inti,j,temp;if(low{i=low;j=up;temp=a[low],qmt++;while(i!=j){qct++;while(itemp)j--,qct++;if(ia[i++]=a[j],qct++;qmt++;while(ii++,qct++;if(ia[j--]=a[i],qct++,qmt++;}a[i]=temp,qmt++;quick(a,low,j-1);quick(a,i+1,up);}}voidquick_sort(intn,intA[])//快速排序(通过调用快速排序递归算法完成){inti;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)quick(a,0,n-1);//调用快速排序递归算法printf("快速排序");output(n,a,qct,qmt);}voidinsertion_sort(intn,intA[])//插入排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=1;i{temp=a[i],mt++;for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
{
W=r[j];
R[j]=r[j-1];
R[j-1]=w;}
3.函数的调用关系图
Main
Insertionsortquicksortbubblesortselectionsortshellsort
Output比较ct.mt次数
4.调试分析
a、调试中遇到的问题及对问题的解决方法
刚开始进行输入时,对有些排序不能实现,我就对不能实现的排序进行分析,对产生的语法错误进行了及时的改正,以至所有的排序算法能够顺利的实现。
b、算法的时间复杂度和空间复杂度
算法的时间复杂度分别是O(n2),
O(nlog2n),O(log2n),
5.调试结果
234561381
321245394637100200
6.源程序:
#include
#defineN100//定义数组最大为100
constintt=3;//定义希尔排序次数
intd[3]={4,3,1};//定义希尔排序比较量
intqmt;//快速排序的移动次数
intqct;//快速排序的比较次数
voidoutput(intn,inta[],intct,intmt)//内部排序中调用的输出函数
inti;
printf("\n排序结果:
");
for(i=0;iprintf("%d",a[i]);//输出各排序完成的数组printf("\n比较次数:%d\n",ct);//输出各排序比较次数printf("移动次数:%d\n\n",mt);//输出各排序移动次数}voidbubble_sort(intn,intA[])//冒泡排序{intmt=0;//移动次数mt=movetimeintct=0;//比较次数ct=cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{for(j=0;j{if(a[j+1]temp=a[j],a[j]=a[j+1],a[j+1]=temp,mt+=3;//关键字交换计为3次移动}}printf("冒泡排序");output(n,a,ct,mt);}voidselection_sort(intn,intA[])//选择排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp,k;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{k=i;for(j=i+1;jif(a[k]>a[j])k=j;temp=a[i],a[i]=a[k],a[k]=temp,mt+=3;//关键字交换计为3次移动}printf("选择排序");output(n,a,ct,mt);}voidquick(inta[],intlow,intup)//快速排序递归算法{inti,j,temp;if(low{i=low;j=up;temp=a[low],qmt++;while(i!=j){qct++;while(itemp)j--,qct++;if(ia[i++]=a[j],qct++;qmt++;while(ii++,qct++;if(ia[j--]=a[i],qct++,qmt++;}a[i]=temp,qmt++;quick(a,low,j-1);quick(a,i+1,up);}}voidquick_sort(intn,intA[])//快速排序(通过调用快速排序递归算法完成){inti;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)quick(a,0,n-1);//调用快速排序递归算法printf("快速排序");output(n,a,qct,qmt);}voidinsertion_sort(intn,intA[])//插入排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=1;i{temp=a[i],mt++;for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
printf("%d",a[i]);//输出各排序完成的数组
printf("\n比较次数:
%d\n",ct);//输出各排序比较次数
printf("移动次数:
%d\n\n",mt);//输出各排序移动次数
voidbubble_sort(intn,intA[])//冒泡排序
intmt=0;//移动次数mt=movetime
intct=0;//比较次数ct=cmdtime
inti,j,temp;
inta[N];
for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{for(j=0;j{if(a[j+1]temp=a[j],a[j]=a[j+1],a[j+1]=temp,mt+=3;//关键字交换计为3次移动}}printf("冒泡排序");output(n,a,ct,mt);}voidselection_sort(intn,intA[])//选择排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp,k;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{k=i;for(j=i+1;jif(a[k]>a[j])k=j;temp=a[i],a[i]=a[k],a[k]=temp,mt+=3;//关键字交换计为3次移动}printf("选择排序");output(n,a,ct,mt);}voidquick(inta[],intlow,intup)//快速排序递归算法{inti,j,temp;if(low{i=low;j=up;temp=a[low],qmt++;while(i!=j){qct++;while(itemp)j--,qct++;if(ia[i++]=a[j],qct++;qmt++;while(ii++,qct++;if(ia[j--]=a[i],qct++,qmt++;}a[i]=temp,qmt++;quick(a,low,j-1);quick(a,i+1,up);}}voidquick_sort(intn,intA[])//快速排序(通过调用快速排序递归算法完成){inti;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)quick(a,0,n-1);//调用快速排序递归算法printf("快速排序");output(n,a,qct,qmt);}voidinsertion_sort(intn,intA[])//插入排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=1;i{temp=a[i],mt++;for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
a[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)
for(i=0;i{for(j=0;j{if(a[j+1]temp=a[j],a[j]=a[j+1],a[j+1]=temp,mt+=3;//关键字交换计为3次移动}}printf("冒泡排序");output(n,a,ct,mt);}voidselection_sort(intn,intA[])//选择排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp,k;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{k=i;for(j=i+1;jif(a[k]>a[j])k=j;temp=a[i],a[i]=a[k],a[k]=temp,mt+=3;//关键字交换计为3次移动}printf("选择排序");output(n,a,ct,mt);}voidquick(inta[],intlow,intup)//快速排序递归算法{inti,j,temp;if(low{i=low;j=up;temp=a[low],qmt++;while(i!=j){qct++;while(itemp)j--,qct++;if(ia[i++]=a[j],qct++;qmt++;while(ii++,qct++;if(ia[j--]=a[i],qct++,qmt++;}a[i]=temp,qmt++;quick(a,low,j-1);quick(a,i+1,up);}}voidquick_sort(intn,intA[])//快速排序(通过调用快速排序递归算法完成){inti;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)quick(a,0,n-1);//调用快速排序递归算法printf("快速排序");output(n,a,qct,qmt);}voidinsertion_sort(intn,intA[])//插入排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=1;i{temp=a[i],mt++;for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
for(j=0;j{if(a[j+1]temp=a[j],a[j]=a[j+1],a[j+1]=temp,mt+=3;//关键字交换计为3次移动}}printf("冒泡排序");output(n,a,ct,mt);}voidselection_sort(intn,intA[])//选择排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp,k;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{k=i;for(j=i+1;jif(a[k]>a[j])k=j;temp=a[i],a[i]=a[k],a[k]=temp,mt+=3;//关键字交换计为3次移动}printf("选择排序");output(n,a,ct,mt);}voidquick(inta[],intlow,intup)//快速排序递归算法{inti,j,temp;if(low{i=low;j=up;temp=a[low],qmt++;while(i!=j){qct++;while(itemp)j--,qct++;if(ia[i++]=a[j],qct++;qmt++;while(ii++,qct++;if(ia[j--]=a[i],qct++,qmt++;}a[i]=temp,qmt++;quick(a,low,j-1);quick(a,i+1,up);}}voidquick_sort(intn,intA[])//快速排序(通过调用快速排序递归算法完成){inti;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)quick(a,0,n-1);//调用快速排序递归算法printf("快速排序");output(n,a,qct,qmt);}voidinsertion_sort(intn,intA[])//插入排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=1;i{temp=a[i],mt++;for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
if(a[j+1]temp=a[j],a[j]=a[j+1],a[j+1]=temp,mt+=3;//关键字交换计为3次移动}}printf("冒泡排序");output(n,a,ct,mt);}voidselection_sort(intn,intA[])//选择排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp,k;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{k=i;for(j=i+1;jif(a[k]>a[j])k=j;temp=a[i],a[i]=a[k],a[k]=temp,mt+=3;//关键字交换计为3次移动}printf("选择排序");output(n,a,ct,mt);}voidquick(inta[],intlow,intup)//快速排序递归算法{inti,j,temp;if(low{i=low;j=up;temp=a[low],qmt++;while(i!=j){qct++;while(itemp)j--,qct++;if(ia[i++]=a[j],qct++;qmt++;while(ii++,qct++;if(ia[j--]=a[i],qct++,qmt++;}a[i]=temp,qmt++;quick(a,low,j-1);quick(a,i+1,up);}}voidquick_sort(intn,intA[])//快速排序(通过调用快速排序递归算法完成){inti;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)quick(a,0,n-1);//调用快速排序递归算法printf("快速排序");output(n,a,qct,qmt);}voidinsertion_sort(intn,intA[])//插入排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=1;i{temp=a[i],mt++;for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
temp=a[j],
a[j]=a[j+1],
a[j+1]=temp,
mt+=3;//关键字交换计为3次移动
printf("冒泡排序");
output(n,a,ct,mt);
voidselection_sort(intn,intA[])//选择排序
intmt=0;//移动次数movetime
intct=0;//比较次数cmdtime
inti,j,temp,k;
for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{k=i;for(j=i+1;jif(a[k]>a[j])k=j;temp=a[i],a[i]=a[k],a[k]=temp,mt+=3;//关键字交换计为3次移动}printf("选择排序");output(n,a,ct,mt);}voidquick(inta[],intlow,intup)//快速排序递归算法{inti,j,temp;if(low{i=low;j=up;temp=a[low],qmt++;while(i!=j){qct++;while(itemp)j--,qct++;if(ia[i++]=a[j],qct++;qmt++;while(ii++,qct++;if(ia[j--]=a[i],qct++,qmt++;}a[i]=temp,qmt++;quick(a,low,j-1);quick(a,i+1,up);}}voidquick_sort(intn,intA[])//快速排序(通过调用快速排序递归算法完成){inti;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)quick(a,0,n-1);//调用快速排序递归算法printf("快速排序");output(n,a,qct,qmt);}voidinsertion_sort(intn,intA[])//插入排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=1;i{temp=a[i],mt++;for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
for(i=0;i{k=i;for(j=i+1;jif(a[k]>a[j])k=j;temp=a[i],a[i]=a[k],a[k]=temp,mt+=3;//关键字交换计为3次移动}printf("选择排序");output(n,a,ct,mt);}voidquick(inta[],intlow,intup)//快速排序递归算法{inti,j,temp;if(low{i=low;j=up;temp=a[low],qmt++;while(i!=j){qct++;while(itemp)j--,qct++;if(ia[i++]=a[j],qct++;qmt++;while(ii++,qct++;if(ia[j--]=a[i],qct++,qmt++;}a[i]=temp,qmt++;quick(a,low,j-1);quick(a,i+1,up);}}voidquick_sort(intn,intA[])//快速排序(通过调用快速排序递归算法完成){inti;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)quick(a,0,n-1);//调用快速排序递归算法printf("快速排序");output(n,a,qct,qmt);}voidinsertion_sort(intn,intA[])//插入排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=1;i{temp=a[i],mt++;for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
k=i;
for(j=i+1;jif(a[k]>a[j])k=j;temp=a[i],a[i]=a[k],a[k]=temp,mt+=3;//关键字交换计为3次移动}printf("选择排序");output(n,a,ct,mt);}voidquick(inta[],intlow,intup)//快速排序递归算法{inti,j,temp;if(low{i=low;j=up;temp=a[low],qmt++;while(i!=j){qct++;while(itemp)j--,qct++;if(ia[i++]=a[j],qct++;qmt++;while(ii++,qct++;if(ia[j--]=a[i],qct++,qmt++;}a[i]=temp,qmt++;quick(a,low,j-1);quick(a,i+1,up);}}voidquick_sort(intn,intA[])//快速排序(通过调用快速排序递归算法完成){inti;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)quick(a,0,n-1);//调用快速排序递归算法printf("快速排序");output(n,a,qct,qmt);}voidinsertion_sort(intn,intA[])//插入排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=1;i{temp=a[i],mt++;for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
if(a[k]>a[j])
k=j;
temp=a[i],
a[i]=a[k],
a[k]=temp,
printf("选择排序");
voidquick(inta[],intlow,intup)//快速排序递归算法
if(low{i=low;j=up;temp=a[low],qmt++;while(i!=j){qct++;while(itemp)j--,qct++;if(ia[i++]=a[j],qct++;qmt++;while(ii++,qct++;if(ia[j--]=a[i],qct++,qmt++;}a[i]=temp,qmt++;quick(a,low,j-1);quick(a,i+1,up);}}voidquick_sort(intn,intA[])//快速排序(通过调用快速排序递归算法完成){inti;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)quick(a,0,n-1);//调用快速排序递归算法printf("快速排序");output(n,a,qct,qmt);}voidinsertion_sort(intn,intA[])//插入排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=1;i{temp=a[i],mt++;for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
i=low;
j=up;
temp=a[low],
qmt++;
while(i!
=j)
qct++;
while(itemp)
j--,
if(ia[i++]=a[j],qct++;qmt++;while(ii++,qct++;if(ia[j--]=a[i],qct++,qmt++;}a[i]=temp,qmt++;quick(a,low,j-1);quick(a,i+1,up);}}voidquick_sort(intn,intA[])//快速排序(通过调用快速排序递归算法完成){inti;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)quick(a,0,n-1);//调用快速排序递归算法printf("快速排序");output(n,a,qct,qmt);}voidinsertion_sort(intn,intA[])//插入排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=1;i{temp=a[i],mt++;for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
a[i++]=a[j],
while(ii++,qct++;if(ia[j--]=a[i],qct++,qmt++;}a[i]=temp,qmt++;quick(a,low,j-1);quick(a,i+1,up);}}voidquick_sort(intn,intA[])//快速排序(通过调用快速排序递归算法完成){inti;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)quick(a,0,n-1);//调用快速排序递归算法printf("快速排序");output(n,a,qct,qmt);}voidinsertion_sort(intn,intA[])//插入排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=1;i{temp=a[i],mt++;for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
i++,
if(ia[j--]=a[i],qct++,qmt++;}a[i]=temp,qmt++;quick(a,low,j-1);quick(a,i+1,up);}}voidquick_sort(intn,intA[])//快速排序(通过调用快速排序递归算法完成){inti;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)quick(a,0,n-1);//调用快速排序递归算法printf("快速排序");output(n,a,qct,qmt);}voidinsertion_sort(intn,intA[])//插入排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=1;i{temp=a[i],mt++;for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
a[j--]=a[i],
qct++,
a[i]=temp,
quick(a,low,j-1);
quick(a,i+1,up);
voidquick_sort(intn,intA[])//快速排序(通过调用快速排序递归算法完成)
for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)quick(a,0,n-1);//调用快速排序递归算法printf("快速排序");output(n,a,qct,qmt);}voidinsertion_sort(intn,intA[])//插入排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,temp;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=1;i{temp=a[i],mt++;for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
quick(a,0,n-1);//调用快速排序递归算法
printf("快速排序");
output(n,a,qct,qmt);
voidinsertion_sort(intn,intA[])//插入排序
for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=1;i{temp=a[i],mt++;for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
for(i=1;i{temp=a[i],mt++;for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
mt++;
for(j=i-1;j>=0&&tempa[j+1]=a[j],mt++;a[j+1]=temp,mt++;}printf("插入排序");output(n,a,ct,mt);}voidshell_sort(intn,intA[])//希尔排序{intmt=0;//移动次数movetimeintct=0;//比较次数cmdtimeinti,j,k,h,y;inta[N];for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
a[j+1]=a[j],
printf("插入排序");
voidshell_sort(intn,intA[])//希尔排序
inti,j,k,h,y;
for(i=0;ia[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
for(i=0;i{h=d[i];for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
h=d[i];
for(j=h;j{y=a[j],mt++;for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
y=a[j],
for(k=j-h,ct++,mt++;k>=0&&ya[k+h]=a[k];a[k+h]=y;}}printf("希尔排序");output(n,a,ct,mt);}voidmain(){intn;inti;intA[N];printf("请输入数组大小(小于100):");scanf("%d",&n);//输入所需排序数组大小for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
a[k+h]=a[k];
a[k+h]=y;
printf("希尔排序");
voidmain()
intn;
intA[N];
printf("请输入数组大小(小于100):
scanf("%d",&n);//输入所需排序数组大小
for(i=0;i{printf("请输入数组a[%d]:",i);scanf("%d",&A[i]);//依次输入数组A[0]~A[n]}bubble_sort(n,A);//冒泡排序insertion_sort(n,A);//插入排序selection_sort(n,A);//选择排序quick_sort(n,A);//快速排序shell_sort(n,A);//希尔排序} 总结在这两周的数据结构课程设计中,我的题目是:排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。 参考文献1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。4.谭浩强,《C语言程序设计》,清华大学出版社。 致谢首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。 附件1源代码如下深度遍历算法的实现源码如下#defineMAX_VER20#include"stdio.h"typedefstruct{intadj;char*info;}arccell;typedefstruct{charvexs[MAX_VER];arccellarcs[MAX_VER][MAX_VER];intvexnum,arcnum;intgraphkind;}mgraph;mgraphG;intvisited[MAX_VER];intcreateDG();intlocate();intvisit();charfirst();charnext();voidDFS();intcreateDG(mgraph*p){inti,j,k,n;charv1,v2;printf("givethenumberofvertexandarc:\n");scanf("%d%d",&(p->vexnum),&(p->arcnum));printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);printf("givethevexs:\n");for(i=0;ivexnum;i++){p->vexs[i]=getch();printf("%3c",p->vexs[i]);}for(i=0;iarcnum;i++)for(j=0;jvexnum;j++)p->arcs[i][j].adj=0;printf("\nthearcsare:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}for(k=0;karcnum;k++){printf("givethetwovexsbetweenwhichtherearearc:\n");v1=getch();v2=getch();printf("%c%c\n",v1,v2);i=locate(G,v1);j=locate(G,v2);if(i>=0&&j>=0)p->arcs[i][j].adj=1;}printf("nowthearcs:\n");for(i=0;iarcnum;i++){for(j=0;jvexnum;j++)printf("%3d",p->arcs[i][j].adj);printf("\n");}return1;}intlocate(mgraphG,charv){inti;for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
printf("请输入数组a[%d]:
",i);
scanf("%d",&A[i]);//依次输入数组A[0]~A[n]
bubble_sort(n,A);//冒泡排序
insertion_sort(n,A);//插入排序
selection_sort(n,A);//选择排序
quick_sort(n,A);//快速排序
shell_sort(n,A);//希尔排序
总结
在这两周的数据结构课程设计中,我的题目是:
排序算法性能分析,这两周课程设计中,通过该题目的设计过程,我加深了对排序算法的理解,对排序算法上基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。
一个人要完成所有的工作是非常困难和耗时的。
在以后的学习中我会更加注意各个方面的能力的协调发展。
在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。
两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,两周中我收益很大,学到很多。
参考文献
1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社。
2.严蔚敏,吴伟民,《数据结构题集(C语言版)》,清华大学出版社。
3.《DATASTRUCTUREWITHC++》,WilliamFord,WilliamTcpp,清华大学出版社(影印版)。
4.谭浩强,《C语言程序设计》,清华大学出版社。
致谢
首先感谢我的指导老师张永张老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。
感谢我的数据结构老师老师和C语言老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。
我的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。
附件1源代码如下
深度遍历算法的实现
源码如下
#defineMAX_VER20
#include"stdio.h"
typedefstruct
{intadj;
char*info;
}arccell;
{charvexs[MAX_VER];
arccellarcs[MAX_VER][MAX_VER];
intvexnum,arcnum;
intgraphkind;
}mgraph;
mgraphG;
intvisited[MAX_VER];
intcreateDG();
intlocate();
intvisit();
charfirst();
charnext();
voidDFS();
intcreateDG(mgraph*p)
{inti,j,k,n;
charv1,v2;
printf("givethenumberofvertexandarc:
\n");
scanf("%d%d",&(p->vexnum),&(p->arcnum));
printf("\nvexnum=%d,arcnum=%d\n",p->vexnum,p->arcnum);
printf("givethevexs:
for(i=0;ivexnum;i++)
{p->vexs[i]=getch();
printf("%3c",p->vexs[i]);
for(i=0;iarcnum;i++)
for(j=0;jvexnum;j++)
p->arcs[i][j].adj=0;
printf("\nthearcsare:
{for(j=0;jvexnum;j++)
printf("%3d",p->arcs[i][j].adj);
printf("\n");
for(k=0;karcnum;k++)
{printf("givethetwovexsbetweenwhichtherearearc:
v1=getch();v2=getch();
printf("%c%c\n",v1,v2);
i=locate(G,v1);j=locate(G,v2);
if(i>=0&&j>=0)p->arcs[i][j].adj=1;
printf("nowthearcs:
return1;
intlocate(mgraphG,charv)
{inti;
for(i=0;iif(v==G.vexs[i])returni;return-1;}intvisit(mgraphG,charv){inti;i=locate(G,v);if(i>=0){printf("%c",v);return1;}elsereturn0;}charfirst(mgraphG,charv){inti,j;i=locate(G,v);for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
if(v==G.vexs[i])returni;
return-1;
intvisit(mgraphG,charv)
i=locate(G,v);
if(i>=0)
{printf("%c",v);return1;}
else
return0;
charfirst(mgraphG,charv)
{inti,j;
for(j=0;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}charnext(mgraphG,charv1,charv2){inti,j;i=locate(G,v1);j=locate(G,v2);for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
if(G.arcs[i][j].adj==1)
returnG.vexs[j];
charnext(mgraphG,charv1,charv2)
for(j++;jif(G.arcs[i][j].adj==1)returnG.vexs[j];return-1;}voidDFS(mgraphG,charv){inti,j,k;charw;i=locate(G,v);j=visit(G,v);if(j)visited[i]=1;for(w=first(G,v);w>=0;w=next(G,v,w)){k=locate(G,w);if(!visited[k])DFS(G,w);}for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
voidDFS(mgraphG,charv)
{inti,j,k;
charw;
j=visit(G,v);
if(j)visited[i]=1;
for(w=first(G,v);w>=0;w=next(G,v,w))
{k=locate(G,w);
if(!
visited[k])DFS(G,w);
for(i=0;i{if(visited[i]==0)visit(G,G.vexs[i]);visited[i]=1;}return;}main(){mgraph*p;inti,j;charv;p=&G;clrscr();createDG(p);for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
{if(visited[i]==0)
visit(G,G.vexs[i]);visited[i]=1;
return;
main()
{mgraph*p;
inti,j;
charv;
p=&G;
clrscr();
createDG(p);
for(i=0;ivisited[i]=0;printf("thevisited:\n");for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
visited[i]=0;
printf("thevisited:
for(i=0;iprintf("%3d",visited[i]);printf("\n");printf("thefirsttovisit:\n");v=getch();printf("%c\n",v);DFS(G,v);printf("\nnowthevisited:\n");for(i=0;iprintf("%3d",visited[i]);}_
printf("%3d",visited[i]);
printf("thefirsttovisit:
v=getch();
printf("%c\n",v);
DFS(G,v);
printf("\nnowthevisited:
for(i=0;iprintf("%3d",visited[i]);}_
}_
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1