一元多项式加减乘除运算(7页).doc
《一元多项式加减乘除运算(7页).doc》由会员分享,可在线阅读,更多相关《一元多项式加减乘除运算(7页).doc(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-一元多项式加减乘除运算-第 1 页中国计量学院实验报告实验课程:算法与数据结构实验名称:一元二项式班 级:学 号:姓 名:实验日期: 2013-5-7一 实验题目: 创建2个一元多项式 实现2个多项式相加 实现2个多项式相减 实现2个多项式相乘 实现2个多项式相除 销毁一元多项式实验成绩: 指导教师:二 算法说明 存储结构:一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行
2、分析,实现一元多项式的相加、相减操作。 加法算法开始定义存储结果的空链 r是 否输出存储多项式的和的链r结束是否同指数项系数相加后存入r中直接把p中各项存入r中直接把q中各项存入r存储多项式2的空链Q是否为空存储多项式1的空链P是否为空合并同类项三 测试结果四 分析与探讨实验数据正确,部分代码过于赘余,可以精简。五 附录:源代码#include#include#includetypedef struct Polynomialfloat coef;int expn;struct Polynomial *next;*Polyn,Polynomial; /Insertvoid Insert(Poly
3、n p,Polyn h) if(p-coef=0) free(p); /系数为0的话释放结点 else Polyn q1,q2; q1=h;q2=h-next; while(q2&p-expnexpn) /查找插入位置 q1=q2; q2=q2-next; if(q2&p-expn=q2-expn) /将指数相同相合并 q2-coef+=p-coef; free(p); if(!q2-coef)/系数为0的话释放结点 q1-next=q2-next; free(q2); else /指数为新时将结点插入 p-next=q2; q1-next=p;/CreatePolynPolyn Create
4、Polyn(Polyn head,int m) int i; Polyn p; p=head=(Polyn)malloc(sizeof( Polynomial); head-next=NULL; for(i=0;icoef,&p-expn); Insert(p,head); return head;/DestroyPolynvoid DestroyPolyn(Polyn head) Polyn q1,q2; q1=head; while(q1!=NULL) q2=q1-next; free(q1); q1=q2; return;/PrintPolynvoid PrintPolyn(Polyn
5、P) Polyn q=P-next; int flag=1; if(!q) /若多项式为空,输出0 putchar(0); printf(n); return; while (q) if(q-coef0&flag!=1) putchar(+);/系数大于0且不是第一项 if(q-coef!=1&q-coef!=-1)/系数非1或-1的普通情况 printf(%g,q-coef); if(q-expn=1) putchar(X); else if(q-expn) printf(X%d,q-expn); else if(q-coef=1) if(!q-expn) putchar(1); else
6、if(q-expn=1) putchar(X); else printf(X%d,q-expn); if(q-coef=-1) if(!q-expn) printf(-1); else if(q-expn=1) printf(-X); else printf(-X%d,q-expn); q=q-next; flag+; printf(n);/compareint compare(Polyn a,Polyn b) if(a&b) if(!b|a-expnb-expn) return 1; else if(!a|a-expnexpn) return -1; else return 0; else
7、if(!a&b) return -1;/a多项式已空,但b多项式非空 else return 1;/b多项式已空,但a多项式非空/AddPolynPolyn AddPolyn(Polyn pa,Polyn pb) Polyn qa=pa-next; Polyn qb=pb-next; Polyn headc,hc,qc; hc=(Polyn)malloc(sizeof(struct Polynomial);/建立头结点 hc-next=NULL; headc=hc; while(qa|qb) qc=(Polyn)malloc(sizeof(struct Polynomial); switch(
8、compare(qa,qb) case 1: qc-coef=qa-coef; qc-expn=qa-expn; qa=qa-next; break; case 0: qc-coef=qa-coef+qb-coef; qc-expn=qa-expn; qa=qa-next; qb=qb-next; break; case -1: qc-coef=qb-coef; qc-expn=qb-expn; qb=qb-next; break; /switch if(qc-coef!=0) qc-next=hc-next; hc-next=qc; hc=qc; else free(qc);/当相加系数为0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一元 多项式 加减乘除 运算
限制150内