![大数据结构实验报告材料一元多项式_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-3/17/b28606d9-9c5b-4cb9-ac99-d0ebc3eea3d2/b28606d9-9c5b-4cb9-ac99-d0ebc3eea3d21.gif)
![大数据结构实验报告材料一元多项式_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-3/17/b28606d9-9c5b-4cb9-ac99-d0ebc3eea3d2/b28606d9-9c5b-4cb9-ac99-d0ebc3eea3d22.gif)
![大数据结构实验报告材料一元多项式_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-3/17/b28606d9-9c5b-4cb9-ac99-d0ebc3eea3d2/b28606d9-9c5b-4cb9-ac99-d0ebc3eea3d23.gif)
![大数据结构实验报告材料一元多项式_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-3/17/b28606d9-9c5b-4cb9-ac99-d0ebc3eea3d2/b28606d9-9c5b-4cb9-ac99-d0ebc3eea3d24.gif)
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实用标准文档一元多项式一、需求分析实现实系数一元多项式的创建,打印以及两个一元多项式的加、减、乘运算。( 1 )程序所能达到的功能:a. 实现一元多项式的输入;b. 实现一元多项式的输出;c. 计算两个一元多项式的和并输出结果;d. 计算两个一元多项式的差并输出结果;e. 计算两个一元多项式的积并输出结果。( 2 )输入的形式和输入值的范围:输入要求:分行输入,每行输入一项, 先输入多项式的指数, 再输入多项式的系数,以 0 0 为结束标志,结束一个多项式的输入。输入形式:2 3 -1 23 01 20 0输入值的范围:系数为int 型,指数为 float 型。(3 )输出的形式:文案大全实用
2、标准文档要求:第一行输出多项式1 ;第二行输出多项式2 ;第三行输出多项式1 与多项式 2 相加的结果多项式;第四行输出多项式1 与多项式 2 相减的结果多项式;第五行输出多项式1 与多项式 2 相乘的结果多项式注:多项式的每一项形如:2.0x3, 注意指数应保留一位小数;多项式按照升幂次序排列;系数为 1 的非零次项应略去系数,系数为0 的项不能出现在结果中;指数为 0 的项应只输出系数;多项式的第一项系数符号为正时,不要输出“+ ”,其他项要输出“ + ”,“ -”符号。-3.0x-1-6.0x-2.0x2-9.0x3-4.0x4-6.0x6二、概要设计( 1 ):程序实现a. 功能:将要
3、进行运算的二项式输入输出;b. 数据流入:要输入的二项式的系数与指数;c. 数据流出:合并同类项后的二项式;d. 程序流程图:二项式输入流程图;e. 测试要点:输入的二项式是否正确,若输入错误则重新输入。文案大全实用标准文档开始申请结点空间输入二项式的项数输入二项式各项的系数x, 指数y输出已输入的二项式否是否输入正确是合并同类项结束(2 ):数据类型ADT Polynomial数据对象: D=ai| aiTermSet,i=1,2,m,m 0TermSet中的每个元素包含一个表示系数的实数和表示指数的整数文案大全实用标准文档数据关系: R1=| ai-1 , aiD,且 ai-1中的指数值
4、ai 中的指数值, i=2, ,n基本操作: sort(Polyn & h);/ 对多项式进行排序print(Polyn h);/ 输出多项式delZeroCoef(Polyn & h);/ 判断系数为零的情况merge(Polyn & h);/ 合并指数相同的项createList();/ 创建多项式addPoly(Polyn h1,Polyn h2);/ 多项式相加subPoly(Polyn h1,Polyn h2);/ 多项式相减multPoly(Polyn h1,Polyn h2);/ 多项式相乘 ADT Polynomial三、详细设计(1 ):存储结构一元多项式的表示在计算机内可以
5、用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。(2 ):数据链表由于采用链表的方法,我们可以建立3 条链;一条用于存放多项式HA ,一条文案大全实用标准文档用于存放多项式HB ,还有一条用于存放新形成的HC 。此外,我们的程序应具备以下几个功能:建立链表,撤销链表,打印链表,按要求插入一个新的结点,复制链表;为了使上面程序结构分析进一步细化,为了使程序结构更加清晰
6、,我们可以把上面的内容都编写成函数形式。1、建立链表该程序建立链表的函数与大多数建立链表的操作基本一致,但是由于实体是一元多项式的关系。我们更希望,在处理客户输入的数据的同时,能对数据进行适当的处理。也就是数学上所说的, “对一元多项式进行化简,并按照降幂排序。”由于在前面的练习中,我们得知,在链表中插入一个结点的函数,具有对链表的成员进行排序与合并的功能。 如此一来, 我们可以巧妙地处理, 在建立链表的同时, 调用”在链表中插入一个结点的函数” ,对新建立的链表进行化简。该函数的算法描述如下;1) 声明指针变量,并作为头指针的指针变量赋初值NULL ;2) 创建一个新的结点,并输入链表的信息
7、;3) 若输入的系数值与函数值同不为 0 时,调用”在链表中插入一个结点的 insert 函数”,将结点插入链表中; (注:这里建立链表的函数与以往的不同,我们是通过假想有一条空链,不断地调用 insert 函数来实现建立链表的功能。简言之;链表中成员的链接全都靠 insert 函数来实现,而该函数仅仅是不断地提供建立链表所要的数据罢了。 )4) 若还要继续插入结点,转到步骤 2 继续进行;文案大全实用标准文档5) 否则,程序结束,把头指针返回主程序。2、撤销链表撤销链表是为了把链表所占用的地址回收起来,防止造成浪费。我们该程序可以采用从链表的始端逐步销去结点。在这个过程中,我们需要链表的头地
8、址作为形式参数,还需要建立一个指针用来指向新头地址。该函数的算法描述如下:1) 指针变量;并把头地址指针赋给新指针变量;2) 把头地址指针指向下一个结点;3) 删除新指针变量;4) 若还要继续删除结点,转到步骤 1 继续执行;5) 否则,结束程序。3、打印链表为了直观地了解链表的内容,我们设计出依次输出链表结点的函数。由于该题目对链表的输出格式又有了一定的要求,因此该函数设计也有着不一样的地方。依题意得;首先输出系数,系数后面紧跟着一个符号”X”;再输出指数,指数的前面带有符号” ”;而且相邻的结点都要用” + ”或” - ”链接起来,因此我们还要对系数的正负进行判断(由于头地址比较特殊,所以
9、头地址除外)。系数为正,要输出符号”+ ”;系数为负时,编译时会自动加入符号”-”,所以不必再输出符号” -”。该函数的算法描述如下:文案大全实用标准文档1) 建立一个新的指针变量,并把头指针赋给它;2) 如果为空,则打印出”全空”的语句;3) 由于该程序没有删除结点的函数,所以碰到系数为” 0 ”时,我们直接跳到步骤 7;4) 否则,先以”系数 X 指数”的形式输出头结点的成员;5) 若还要继续输出结点,就判断系数的正负;1 ,若系数为正,以” + 系数 X 指数” 的形式输出;2 ,若系数为负,以” 系数 X 指数” 的形式输出;6) 把新指针指向下一个结点;7) 若还要继续输出结点,转到
10、步骤 3 继续执行;8) 否则,结束程序。4、按要求插入一个新的结点由于前面的建立链表的creat 函数,调用了该函数,所以我们这个函数的设计思想也明朗多了,由于建立的链表是有序的,并且需要合并指数相同的结点,所以要新结点需要按指数值降幂的顺序插入链表中。判断链表是否为空,如果为空则直接插入即可;否则按照要插入结点指数值的大小在链表中寻找他要插入的位置,对于插入位置有第一个节点、最后一个结点和链表中间这三种情况分别进行处理。函数的形式参数:链表的头地址,指向要插入结点的指针;返回结果:插入结点后新链表的头地址。该函数的算法描述如下:文案大全实用标准文档1)声明指针变量并令它指向连头结点;2)判
11、断指向要插入结点的指针是否为空;3)如果是,则不需要插入新结点,直接返回头地址,程序结束;4)否则再判断链表是否为空;5)如果是,则直接插入结点,然后返回链表的头地址,程序结束;6)否则,在链表中寻找待插入结点的插入位置:1,若链表中存在着与“插入的结点”的指数相同的情况,我们依然插入链中,只是把该结点的系数修改为”0”,把链中的结点系数修改为”两系数之和”。 (为了方便,我们并没有把结点进行删除的操作,只是在输出的操作里加入权限设置。)2,若链表中不存在着与“插入的结点”的指数相同的情况,我们正常地插入链中。7)返回插入结点后链表的头地址,程序结束。5、主函数主函数主要负责输出界面的指引语句
12、,并合理地调用各个函数,还要有适当的循环操作以及停止循环的语句,以致可以方便地达到合并两个一元多项式的功能。(3 ):函数的调用关系:文案大全实用标准文档maincreateListprintaddPolysubPolymultPolymergemergeprintmergeprintmergeprintdelZeroCoefsort四、 调试分析( 1 )调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析 :在输入诸如“ 0,3 ”,“2,0 ”时,程序无法正常运行或总是出错.解决:对指数或系数为 0 的情况应单独讨论。 为此,建立了 delZeroCoef函数来解决问题。(2
13、 )算法的时间复杂度及改进算法的时间复杂度:一元多项式的加法运算的时间复杂度为O(m+n ),减法运算的时间复杂度为O(m-n) ,其中 m ,n 分别表示二个一元多项式的项数。文案大全实用标准文档问题和改进思想:在设计该算法时,出现了一些问题,例如在建立链表时头指针的设立导致了之后运用到相关的指针时没能很好的移动指针出现了数据重复输出或是输出系统缺省值,不能实现算法。实现加法时该链表并没有向通常那样通过建立第三个链表来存放运算结果,而是再度利用了链表之一来进行节点的比较插入删除等操作。为了使输入数据按指数降序排列,可在数据的输入后先做一个节点的排序函数,通过对链表排序后再进行之后加减运算。五
14、、总结与分析一元多项式的表示与其运算设计,运行结果能表达多项式, 包括其系数及指数,也实现了多项式的相加、相减以及相乘,运行结果符合一元多项式的在实际运用中的运算法则。使用该程序能快捷方便计算出多个复杂的一元多项式的计算,体现了本设计的可行性以及实用性。集合的表示与运算设计, 运行结构能表达出输入的集合元素并以集合形式输出,也实现了集合的相并、 相交、求差集,运行结果符合集合运算法则,操作简单方便,体现了本设计的可行性以及实用性。两个设计具有一定共同点,均运用了数据结构中线性结构的内容。一元多项式构造链表存放数据与集合构造链表存放集合元素原理相仿,而两者均运用到switch语句实现运算操作,
15、由于两者要求的运算操作较多,使用 switch 语句实行多分支选择则可简化程序,同时使程序显得精辟。设计期间,翻阅资料让我对数据结构有了重新的认识,比如说能区分出C 语言以及 C+ 语言,操作时,常常会出现程序无误确无法运行,这就是程序中含有C文案大全实用标准文档语言又含有 C+ ,语句无误但是程序是不正确的。有时候是因为没有调用好语句。而设计中另外的收获就是可以趁着上机的机会巩固数据结构的知识,尤其是线性表一章的内容。要想学好数据结构以及课程设计,多操作是难免的,熟悉掌握各种类型的设计思路。刚开始要从基础程序入手,以课本上的例题为准,反复练习打好基础,再找一些课外的资料,以帮助开拓思路,提高
16、自己的分析、解决能力,掌握一般的规律。今后的学习也要继续这样的学习态度,不断钻研,力争上游,为将来的大设计、大项目打下扎实的基础。五、 源程序代码#include#include#includetypedef struct LNode float coef;int expn;struct LNode *next;LNode;LNode* InitPolyn(LNode *La,int n) if(n coef = 0.0;int i;printf( 依次输入 %d 个非零项(每项前一个为系数,后一个为指数)n,n);for (i = 1; i coef,&La-expn);if(La-coef
17、)Lb = La;La = La-next = (LNode*)malloc(sizeof(LNode);文案大全实用标准文档Lb-next = NULL;free(La);return h;LNode* selsort(LNode *h) LNode *g, *La, *Lb;if(!h) return NULL;float f;int i, fini = 1;for(g = h;g-next&fini;g = g-next) fini = 0;for(La = h,Lb = h-next;Lb;La = La-next,Lb = Lb-next)if (La-expn expn) f =
18、La-coef;i = La-expn;La-coef = Lb-coef;La-expn = Lb-expn;Lb-coef = f;Lb-expn = i;fini = 1;for(g = h,La = g-next;La;)if(g-expn=La-expn) g-coef += La-coef;g-next = La-next;Lb = La;La = La-next;free(Lb);else if(g-next) g = g-next;La = La-next;文案大全实用标准文档return h;void PrintfPoly(LNode *La) LNode *Lb = La;
19、if(!Lb) putchar(0);return;if(Lb-coef!=1) printf(%g,Lb-coef);if(Lb-expn=1) putchar(X);else if(Lb-expn) printf(X%d,Lb-expn);else if(!Lb-expn) putchar(1);else if(Lb-expn=1) putchar(X);else printf(X%d,Lb-expn);Lb = Lb-next;while (Lb) if(Lb-coef 0) putchar(+);if(Lb-coef!=1) printf(%g,Lb-coef);if(Lb-expn=
20、1) putchar(X);else if(Lb-expn) printf(X%d,Lb-expn);else if(!Lb-expn) putchar(1);else if(Lb-expn=1) putchar(X);else printf(X%d,Lb-expn);Lb = Lb-next;Compare(LNode *a, LNode *b) if (a-expn expn) return -1;文案大全实用标准文档if (a-expn b-expn) return 1;return 0;LNode* AddPolyn(LNode *Pa, LNode *Pb) LNode *h, *q
21、a = Pa, *qb = Pb, *La, *Lb;float sum;h = La = (LNode*)malloc(sizeof(LNode);La-next = NULL;while (qa & qb) switch (Compare(qa,qb) case -1:La-next = qb;La = qb;qb = qb-next;break;case 0:sum = qa-coef + qb-coef;if (sum != 0.0) La-next = qa;qa-coef = sum;La = qa;qa = qa-next;else Lb = qa;qa = qa-next;fr
22、ee(Lb);Lb = qb;qb = qb-next;free(Lb);break;文案大全实用标准文档case 1:La-next = qa;La = qa;qa = qa-next;break;if (Pa) La-next = qa;if (Pb) La-next = qb;Lb = h;h = h-next;free(Lb);return h;LNode* Add(LNode *Pa, LNode *Pb) int n;puts( 再输入 1 个一元多项式的项数 );scanf(%d,&n);Pb = InitPolyn(Pb,n);Pb = selsort(Pb);PrintfPo
23、ly(Pa);if(Pb & Pb-coef0) printf( + );PrintfPoly(Pb);Pa = AddPolyn(Pa,Pb);printf( = );Pa = selsort(Pa);PrintfPoly(Pa);return Pa;LNode* SubtractPolyn(LNode *Pa, LNode *Pb) LNode *La = Pb;while(La) 文案大全实用标准文档La-coef *= -1;La = La-next;return AddPolyn(Pa,Pb);LNode* Subtract(LNode *Pa, LNode *Pb) int n;p
24、uts(n再输入 1 个一元多项式的项数 );scanf(%d,&n);Pb = InitPolyn(Pb,n);Pb = selsort(Pb);PrintfPoly(Pa);printf( - );putchar();PrintfPoly(Pb);putchar();Pa = SubtractPolyn(Pa,Pb);printf( = );Pa = selsort(Pa);PrintfPoly(Pa);return Pa;LNode* MultiplyPolyn(LNode *Pa, LNode *Pb) if(!Pb) return NULL;LNode *pa = Pa, *p, *
25、q, *r, *s, *t;r = p = (LNode*)malloc(sizeof(LNode);while(pa) p-coef = pa-coef;p-expn = pa-expn;q = p;p = p-next = (LNode*)malloc(sizeof(LNode);pa = pa-next;q-next = NULL;文案大全实用标准文档free(p);pa = Pa;t = s = (LNode*)malloc(sizeof(LNode);while(pa) q = s;s = s-next = (LNode*)malloc(sizeof(LNode);pa = pa-n
26、ext;q-next = NULL;free(s);pa = Pa;while(pa) pa-coef *= Pb-coef;pa-expn += Pb-expn;pa = pa-next;Pb = Pb-next;while(Pb) p = r;s = t;while(p) s-coef = p-coef * Pb-coef;s-expn = p-expn + Pb-expn;p = p-next;s = s-next;Pa = AddPolyn(Pa,t);Pb = Pb-next;return Pa;LNode* Multiply(LNode *Pa, LNode *Pb) 文案大全实用标准文档int n;puts(n再输入 1 个一元多项式的项数 );scanf(%d,&n);Pb = InitPolyn(Pb,n);Pb = selsort(Pb);putchar();PrintfPoly(Pa);putchar();printf( );putchar();PrintfPoly(Pb);putchar();printf( = );Pa = MultiplyPolyn(Pa,Pb);Pa = sels
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 猪肉摊位员工合同(2篇)
- 五年级上册数学口算1000题
- 八年级地理下册《8.2 以河流为生命线的地区-长江沿江地带》听课评课记录 新人教版
- 人教版数学八年级下册18.1.2第2课时《 三角形的中位线》听评课记录
- 二零二五年度商铺转租合同含品牌入驻与运营支持
- 二零二五年度医院感染控制中心医生聘用与防控合同
- 2025年度企业绿色环保顾问咨询合同
- 2025年度铲车除雪租赁与道路清障合同规范
- 人教版部编历史八年级上册《第10课 中华民国的创建》听课评课记录3
- 人民版道德与法治九年级上册第九课《中华民族的选择》配套听课评课记录
- 苯胺合成靛红工艺
- 质量保证发展史和国外相关标准简介
- 三年级上册数学脱式计算大全600题及答案
- 计算机控制系统 课件 第10章 网络化控制系统的分析与设计
- 鲁教版(五四制)七年级数学上册期末考试卷-附带答案
- 南京大学仪器分析习题集
- 空调维保应急预案
- 小学六年级数学上册解决问题专项必考题西师大版
- 2023年高考语文全国乙卷作文范文及导写(解读+素材+范文)课件版
- 模块建房施工方案
- 多域联合作战
评论
0/150
提交评论