一元稀疏多项式的加法运算数据结构实习.doc
《一元稀疏多项式的加法运算数据结构实习.doc》由会员分享,可在线阅读,更多相关《一元稀疏多项式的加法运算数据结构实习.doc(10页珍藏版)》请在课桌文档上搜索。
1、-实习一线性表、栈和队列及其应用 一元稀疏多项式的加法运算【问题描述】设计一个实现一元稀疏多项式相加运算的演示程序。【根本要求】1输入并建立两个多项式;2多项式a与b相加,建立和多项式c;3输出多项式a,b,c。输出格式:比方多项式a为:A(*)=c1*e1+ c2*e2+ cm*em,其中,ci和ei分别为第i项的系数和指数,且各项按指数的升幂排列,即0e1e2em。多项式b,c类似输出。【测试数据】1(1+*+*2+*3+*4+*5)+(-*3-*4)=(1+*+*2+*5)2(*+*100)+(*100+*200)=(*+2*100+*200)3(2*+5*8-3*11)+(7-5*8+
2、11*9)=(7+2*+11*9-3*11)一需求分析1.输入的形式和输入值的围:输入是从键盘输入的,输入的容为多项式的系数和指数,其中多项式的每一项分别以一个系数和指数的形式输入,不带未知数*,系数为任意的实数,指数为任意的整数。要完毕该多项式的输入时,输入的指数和系数都为0.2. 输出的形式从屏幕输出,显示用户输入的多项式,并显示多项式加减以后的多项式的值,并且多项式中将未知数*表示了出来. 形式为:+c1*e1+c2*e2+ci*ei+(ci和ei分别是第i项的系数和指数,序列按指数升序排列。)当多项式的*一项的系数为+1或者-1时侧该项多项式的输出形式为*ei或-*ei;当该项的系数为
3、正时输出+ci*ei,当为负数时则输出ci*ei3. 程序所能到达的功能输入并建立多项式,实现一元稀疏多项式的相加并输出。4. 注意:所有多项式都必须以指数升密形式输入。5. 测试数据为1(1+*+*2+*3+*4+*5)+(-*3-*4)=(1+*+*2+*5)2(*+*100)+(*100+*200)=(*+2*100+*200)3(2*+5*8-3*11)+(7-5*8+11*9)=(7+2*+11*9-3*11)二设计1.设计思路1.储存构造:链式存储2. 主要算法根本思路首先定义一个多项式的构造体,存放多项式每一项的系数和指数以及ne*t指针;然后定义两个指针,第一个指针指向第一个多
4、项式,第二个指针指向第二个多项式。然后比较两个多项式第一项的指数的大小,如果两个多项式的指数一样,则将他们的系数相加,指数不变;如果不同则比较他们指数的大小,并将指数小的放在第一项。然后指向指数小的那一项的指针后移,它的指数去和刚刚必然的那一项的指向相比较直至两个多项式相加完。其中如果*二项的系数相加后为0,则该项不输出。相加时的程序如下:pnode * add(pnode *heada,pnode *headb) /多项式相加/pnode *headc,*p,*q,*s,*r;float *;p=heada; /p指针指向第一个多项式的第一项/q=headb; /q指针指向第二个多项式的第一
5、项/ headc=(pnode *)malloc(sizeof(pnode); /为两式相加的结果c申请存/ r=headc; /r指向结果/ while(p!=NULL&q!=NULL) /判断两个式子都合法/if(p-e=q-e ) /指数一样时系数相加/*=p-c+q-c;if(*!=0)s=(pnode *)malloc(sizeof(pnode); s-c=*;s-e=p-e;r-ne*t=s;r=s;q=q-ne*t;p=p-ne*t; /指向多项式的下一项/else if(p-eq-e) /多项式按升幂排序/s=(pnode *)malloc(sizeof(pnode);s-c=
6、q-c;s-e=q-e;r-ne*t=s;r=s;q=q-ne*t;elses=(pnode *)malloc(sizeof(pnode);s-c=p-c;s-e=p-e;r-ne*t=s;r=s;p=p-ne*t;while(p!=NULL) /第一个式子不为0时的相加法则/s=(pnode *)malloc(sizeof(pnode);s-c=p-c;s-e=p-e;r-ne*t=s;r=s;p=p-ne*t;while(q!=NULL) /第二个式子不为0的相加法则/s=(pnode *)malloc(sizeof(pnode);s-c=q-c;s-e=q-e;r-ne*t=s;r=s;
7、q=q-ne*t;r-ne*t=NULL;headc=headc-ne*t; /c的指向依次指向下一项/return headc; /返回两式相加的结果/2.设计表示1函数调用关系图main-create()-create()-add()-display()-display()-display()2函数规格接口说明 pnode * creat() /*此函数时用来创立多项式的*/ void display(pnode *head) /*head为每个多项式的头指针*/ pnode * add(pnode *heada,pnode *headb) /* heada headb为两个多项式的头指针
8、*/3.实现注释1根据提示输入多项式每一项的指数和系数,完毕该多项式的输入时系数和指数都应该输入0。2可以输入任何指数型式的多项式。4.详细设计主要算法的细化输出函数如下: void display(pnode *head) /多项式输出/pnode *p;int one_time=1; p=head; while(p!=NULL) /判断头结点非空/if(one_time=1)if(p-e=0) /当指数为0即*o时只需要输出系数c/printf(%f,p-c); else if(p-c=1) /系数为1时输出*ei/printf(*%d,p-e);else if(p-c=-1 ) /系数为
9、-1时输出-*ei/printf(-*%d,p-e);else if(p-c0) /系数大于0时系数前面带+/printf(+%f*%d,p-c,p-e);else if(p-cc,p-e);one_time=0;elseif(p-e=0)if(p-c!=0)printf(+%f,p-c);else if(p-c=1) /系数为1时输出*ei/printf(+*%d,p-e);else if(p-c=-1 ) /系数为-1时输出-*ei/printf(-*%d,p-e);else if(p-c0) /系数大于0时系数前面带+printf(+%f*%d,p-c,p-e); else if(p-c
10、c,p-e) p=p-ne*t;printf(n);主函数如下: void main()pnode * a,*b,*c; /定义三个多项式/ printf(input the first:n); /输入第一个多项式/ a=creat(); /调用创立函数,创立第一个多项式/ printf(input the second:n); /输入第二个多项式/b=creat(); /调用创立函数,创立第二个多项式/ c=add(a,b); /调用相加函数/printf(the first:);display(a); /输出第一个多项式/ printf(the second:);display(b); /
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一元 稀疏 多项式 加法 运算 数据结构 实习
链接地址:https://www.desk33.com/p-6511.html