当前位置:首页 > 数据结构课程设计报告一元多项式加减乘除
一元多项式的加法、减法、乘法 6.3.2顺序存储的多项式相减 程序源代码:
void SUB(Ploy A,Ploy B,Ploy *M) /*多项式A与多项式B相减(A-B),得到多项式M*/ {
int la=A.len,lb=B.len,i; M->len=la>lb?la:lb;
for(i=0;i<=la&&i<=lb;i++) {
M->a[i]=A.a[i]-B.a[i]; }
while(i<=la) {M->a[i]=A.a[i];i++;}
while(i<=lb) {M->a[i]=0-B.a[i];i++;} return ; }
-14-
一元多项式的加法、减法、乘法 6.4 一元多项式相乘
6.4.1链式存储的多项式相乘 程序源代码:
polynomail mulpolyn(polynomail pa,polynomail pb)
{
//完成多项式相乘运算,即:Pa=Pa*Pb polynomail s,newp,q,p,r; int i=20,j;
newp=(LNode*)malloc(sizeof(LNode)); r=newp;
for(p=pa->next;p!=NULL;p=p->next) for(q=pb->next;q!=NULL;q=q->next) {
s=(LNode*)malloc(sizeof(LNode));
s->data.coef=p->data.coef*q->data.coef; s->data.expn=p->data.expn+q->data.expn; r->next=s; r=s; }
r->next=NULL;
printf(\升序 1 , 降序 2\\n\ printf(\选择:\ scanf(\ if(j==1)
arrange1(newp); else
arrange2(newp); for(;i!=0;i--) {
for(q=newp->next;q->next!=NULL;q=q->next)//合并同类项 for(p=q;p!=NULL&&p->next!=NULL;p=p->next) if(q->data.expn==p->next->data.expn) {
q->data.coef=q->data.coef+p->next->data.coef; r=p->next;
p->next=p->next->next; free(r); } }
return newp;}
-15-
一元多项式的加法、减法、乘法 6.4.2顺序存储多项式相乘
程序源代码:
void MUL(Ploy A,Ploy B,Ploy *M)
/*多项式A与多项式B相乘,得到多项式M*/ {
int i,j;
for(i=0;i<=A.len+B.len+1;i++) M->a[i]=0; for(i=0;i<=A.len;i++) for(j=0;j<=B.len;j++) {
M->a[i+j]+=A.a[i]*B.a[j]; }
M->len=A.len+B.len; return ; }
-16-
一元多项式的加法、减法、乘法 6.5一元多项式输出结果按项的指数排序
6.5.1链式由小到大排序
图6.6.1链式升序流程图
void arrange1(polynomail pa)
{ polynomail h=pa,p,q,r; if(pa==NULL) exit(-2);
for(p=pa;p->next!=NULL;p=p->next); r=p; for(h=pa;h->next!=r;)//大的沉底
{ for(p=h;p->next!=r&&p!=r;p=p->next)
if(cmp(p->next->data,p->next->next->data)==1) { q=p->next->next;
p->next->next=q->next; q->next=p->next; p->next=q; }
r=p;//r指向参与比较的最后一个,不断向前移动 } }
-17-
共分享92篇相关文档