ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:576.61KB ,
资源ID:12833176      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12833176.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(算法与数据结构.docx)为本站会员(b****0)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

算法与数据结构.docx

1、算法与数据结构 数据结构与算法 课程设计 题 目 求素数问题、数据删除问题、 方程求解问题、排序重构问题 目 录摘 要 3一求素数问题 41.采用类语言定义相关的数据类型 42.算法设计 43.函数的调用关系图 44.调试分析 45.测试结果 56.源程序(带注释) 5二数据删除问题 61.采用类语言定义相关的数据类型 62.算法设计 63.函数的调用关系图 64.调试分析 65.测试结果 66.源程序(带注释) 6三方程求解问题 71.采用类语言定义相关的数据类型 72.算法设计 73函数的调用关系图 74.调试分析 75.测试结果 76.源程序(带注释) 7四排序重构问题 71.采用类语言

2、定义相关的数据类型 72.算法设计 73函数的调用关系图 74.调试分析 75.测试结果 76.源程序(带注释) 7总 结 8参考文献 9致 谢 10摘 要求素数问题:素数问题的求解是一种利用埃拉托色尼筛法来查找小于N的素数的求解方法,它能够实现对数据N的输入,判断N是否越界,查找小于N的素数,判断是否继续输入N等操作。数据删除问题:删除具有N个数据项的数组A中所有重复项的程序,返回A中仍有的数据项。运行时间在O(NlogN)方程求解问题:方程A5+B5+C5+D5+E5=F5刚好有一个满足0ABCDEF75的整数解。排序重构问题:令A为一个由N个已特殊排序数组成的数列:A1,A2,AN,其中

3、A1=0。令B为N(N-1)/2个数(定义为Dij=Ai-Aj(ij))组成的数列。例如,A=0,1,5,8,那么D=1,3,4,5,7,8。 关键词:素数 埃拉托色尼筛法 删除元素 方程求解 递归算法 排序与重构 一求素数问题它素数问题的求解是一种利用埃拉托色尼筛法来查找小于N的素数的求解方法,能够实现对数据N的输入,判断N是否越界,查找小于N的素数,判断是否继续输入N等操作。1.采用类语言定义相关的数据类型构建线性表typedef struct int dataMaxSize; int length;SeqList;SeqList L,Q; 判断素数SeqList JudgePrimeNu

4、mber(SeqList L,SeqList Q,int m) int i,j,l=0,a=0,b=0; double n;2.算法设计冒泡排序voidbubble_sort(inta,intn)/n为数组a的元素个数inti,j,temp;for(j=0;jn-1;j+)for(i=0;iai+1)/数组元素大小按升序排列temp=ai;ai=ai+1;ai+1=temp;3.函数的调用关系图判断2N之间的整数是否是素数,算法的时间复杂度为O(n 2)4.调试分析a、 输入的数据错误。解决办法:对输入的数据进行筛选和检验b、 算法的时间复杂度为o(n2)c、 算法的空间复杂度为o(n2)5.

5、测试结果6.源程序(带注释)#include #define TRUE 1#define FALSE 0#define SIZE 200 main()int l;/*用于遍历数*/int i; /*i表示整数和对应的下标*/int j; /*j表示正要处理的质数j之前的已处理j之后的未处理*/int k; /*k表示正在处理的j的倍数从2开始到j*kSIZE*/int aSIZE; /*下标表示整数内容判断是否为质数*/int *p; /*控制循环*/for(l=2;l=200;l+) printf( %d,l);printf(n200以内的素数有:);for(p = a; p a+SIZE;

6、 +p) /*初始化数组全是TRUE*/*p = TRUE;a0 = a1 = FALSE; /*设置前面两个不是质数的数的状态为FALSE*/i = 2;while(i SIZE) /*找到下一个质数*/while(ai+ = TRUE) j = i-1;break; for(k = 2; j*k SIZE & i SIZE; +k) /*处理质数的倍数*/aj*k = FALSE;for(p = a; p a+SIZE; +p) /*打印出质数*/if(*p = TRUE) printf(%8d, p-a);printf(n);return 0;二数据删除问题编写删除具有N个数据项的数组A

7、中所有重复项的程序,返回A中仍有的数据项。要求运行时间在O(NlogN)。1.采用类语言定义相关的数据类型typedef struct StackNode /结点结构体 char data; struct StackNode *next;StackNode,*LinkStackPtr;typedef struct LinkStack /链栈结构体 LinkStackPtr top; int count;LinkStack;2.算法设计1.产生随机数组。2.利用随机数组创建链表。3.用x数组中的n个数据创建一个单链表,返回表头节点地址。4.删除重复节点:递归函数。5.从输入参数节点出发,删去值相

8、同的多余节点的算法。3.函数的调用流程图4.调试分析1.起初设置的是自己输入一组数组,在进行删除,不过问题是过于繁琐,处理方法是随机出现数组。2.时间复杂度是0(n);5.测试结果6.源程序(带注释)#include main() int i,j,t; int a10; printf(请输入10个数:n); for(i=0;i10;i+) /输入 scanf(%d,&ai); printf(输入的10个数是:); for(i=0;i10;i+) printf(%d ,ai); printf(n);A for(i=0;i10;i+) /排序 for(j=i+1;jaj) t=ai; ai=aj;

9、 aj=t; printf(10个数排序后是:); for(i=0;i10;i+) printf(%d ,ai); printf(n); for(i=0;i9;i+) /删除重复数字 if(ai=ai+1) /如果后一个数等于前一个数,就把后一个数删掉(ps:这里已经排过序,所以可以这样做来删除重复数字) for(j=i+1;j9;j+) /这里的删除用的直接覆盖 aj=aj+1; printf(删除重复数字后:); for(i=0;i0&ai-1=ai) /只输出前面不重复的数 break; printf(%d ,ai); printf(n);三方程求解问题方程A5+B5+C5+D5+E5=

10、F5刚好有一个满足0ABCDEF75的整数解。请编写一个求出该解的程序。1.采用类语言定义相关的数据类型typedef char VerT;#define MaxSize 100#define MaxVertices 10#define MaxWeight 10000#define N 7typedef int DataType;typedef struct DataType listMaxSize; int size;SeqList;2.算法设计首先建立数组,用来存储整型ABCDEF五次方的值,然后利用fo嵌套循环,一次求ABCDEF五次方的值,接下来用if判断语句,若ABCDE次方之和与F

11、五次方的差为零,输出ABCDEF的整数解。运用递归算法,其中时间复杂度为n的6次方3.函数的调用关系图 函数关系调用图赋予A值赋予B值赋予C值赋予D值赋予E值计算条件判断赋予F值计算结果4.调试分析运行程序,是否可以输出ABCDEF的整数解。需注意的是在嵌套循环的时候必须嵌套在相应的位置,以免出错。时间复杂度为O(766).5.测试结果6.源程序(带注释)include#include int key() /求方程的解 找到解返回否则返回 long p76; long A,B,C,D,E,F,i,flag=0; for(i=1;i=75;i+) pi=pow(i,5); /把的次方放在数组中,

12、以便调用 for(A=1;A=60;A+) /循环穷举找到方程的解 for(B=A;B=75;B+) for(C=B;C=75;C+) for(D=C;D=75;D+) for(E=D;E=75;E+) for(F=E;F=75;F+) if(pA+pB+pC+pD+pE-pF=0) printf(ttt%d %d %d %d %d %dnn,A,B,C,D,E,F); flag=1; if(flag=1) return 1; else return 0; int main() if(key()=0) printf(方程A5+B5+C5+D5+E5=F5(0=A=BC=D=E=Fj))组成的数

13、列。例如,A=0,1,5,8,那么D=1,3,4,5,7,8。请完成:编写程序,根据A构造D;编写程序,构造与D相对应的某一个数列A,注意A不是唯一的。1.采用类语言定义相关的数据类型#ifndef ADJACENCYMATRIXED /防止该头文件被重复引用#define ADJACENCYMATRIXED /而引起的数据重复定义#define INFINITY 32767 /最大值#define MAX_VERTEX_NUM 20 /最大顶点个数typedef int VRType; /权值,即边的值typedef char InfoType; /附加信息的类型,后面使用时会定义成一个指针

14、typedef char VertexTypeMAX_VERTEX_NUM; /顶点类型typedef enum DG=1, DN, UDG, UDN GraphKind; /有向图,有向网,无向图,无向网typedef struct ArcCell VRType adj; /VRType 是顶点关系类型。对无权图,用 1 或 0 表示相邻否;对带权图,则为权值类型。 InfoType* info; /该弧关系信息的指针ArcCell, AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;typedef struct VertexType vexsMAX_VERTEX_

15、NUM; /顶点向量 AdjMatrix arcs; /邻接矩阵 int vexnum, arcnum; /图的当前顶点数和弧数 GraphKind kind; /图的种类标志MGraph;typedef struct /普里姆算法辅助数组的定义 VertexType adjvex; VRType lowcost;closedgeMAX_VERTEX_NUM;#endif /结束if2.算法设计首先用题目给的顺序序列按照题目给的规律生成序列D,然后根据D生成A,经过分析我们发现后来生成的A里面的元素一定是D里面的元素,即A为D的子集,这样得到算法:从D里面找到和A的个数一样的元素,然后按照题目

16、给的那个算法生成D1,当D1和D完全相等的时候,我们找到的那几个元素就是A的一个组合。3函数的调用关系图 4.调试分析a调试中遇到的问题及对问题的解决方法第一次排序的时候忘了让对应的下标对应起来,结果导致排序结果失误。解决方法,检查到之后更正回来。b算法的时间复杂度和空间复杂度由于采用了三重循环进行组合计算,所以时间复杂度为O(n3)5.测试结果6.源程序(带注释)# include # include # include # include # define MAX 100 typedef struct int dataMAX; int flagMAX; int size; array;in

17、t CREAT_NEW_A() FILE *fp; array b,a; /b原始数据存储.a,构造的用于判断的结构体 int i,j,z; char chMAX; strcpy(ch,数组c.c); if(fp=fopen(数组B.c,rb)=NULL) printf(文件打开失败!n); exit(0); while(!feof(fp) fread(&b,1,sizeof(array),fp); fclose(fp); a.data0=0; printf(数组:n); for(i=0;ib.size;i+) for(j=i+1;jb.size;j+) for(z=j+1;zb.size;z

18、+) a.data1=b.datai; a.data2=b.dataj; a.data3=b.dataz; a.size=4; COMPARE(&a,ch); printf(满足条件n); return 0; int max; intCOMPARE(array *a,char chMAX) FILE *fp; array d; array b; int i,j,k=0,n,x,y,z; if(fp=fopen(ch,wb)=NULL) printf(文件打开失败!n); exit(0); for(i=0;isize;i+) x=a-datai; for(j=i+1;jsize;j+) y=a-

19、dataj; b.datak=y-x; k+; b.size=k; sort(&b); fwrite(&b,1,sizeof(array),fp); fclose(fp); if(fp=fopen(数组B.c,rb)=NULL) printf(文件打开失败!n); exit(0); while(!feof(fp) fread(&d,1,sizeof(array),fp); fclose(fp); for(i=0;id.size;i+) if(b.datai!=d.datai) break; if(i=d.size) for(i=0;isize;i+) printf(%d ,a-datai);

20、printf(n); return 0; 总 结在为期一周的算法与程序设计的课设中学到了好多的知识。起初我对四个问题无从下手,但通过在图书馆和网上查阅资料,和与老师的交流后豁然开朗有了一定的了解。便开始着手进行程序设计,在设计的途中遇到了很多问题,有些自己能够看出问题所在并改正过来,有些则是问老师或者问同学才逐渐改过来,在整个课设过程中我对算法与程序设计这门课程有了更加深刻的理解和认识,在以前的时候,学习最多的是算法的概念,而对算法的编码了解很少,通过这一次课程设计,对编码方面也有了较深刻的理解。在这一周中,我们合理的分配了任务,并经过我们共同的努力才把这一课题基本完成了。通过此次课程设计我们

21、更加理解了这方面的内容。这次的课程设计不仅考查了我们理论知识,更主要的是考查了我们动手实践的能力,考查了我们用C,数据结构编程的能力。从这次的课程设计中,我看到了自己的不足,首先就是比较轻浮,不能够踏踏实实的,其次,就是我个人的动手操作能力,即上机编程能力还是十分欠缺的,这还是我们平时锻炼的少所造成的。所以在以后的学习中我们要加强这方面的锻炼,为我们走上社会打下坚实的基础。所以此次的课程设计对我来说意义重大。参考文献 1梁路宏,艾海舟,何克忠.基于多模板匹配的单人脸检测J.中国图象图形学报,1999,4A(10):823-830.2 胡珊珊.基于遗传算法的人脸检测研究M.青岛:青岛大学出版社,2006)致 谢此次的课程设计,我们又学到了很多知识。因此我们首先要感谢老师,是他们为我们提供了实践的机会,我们才有这样一个学习知识的机会。其次,这次课程设计的过程中,我查阅了大量的书籍资料,并且我自己的技术和能力有了很大的提高。设计工作还是比较顺利,但也遇到了不少问题,在同学和老师那儿得到一些有益的帮助,更重要的是指导老师也不辞辛苦,总能及时的对我进行指导,正是由于他们的无私的帮助和指导,我才能比较顺利的完成这次毕业设计任务。在此,我表示由衷地感谢!

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1