操作方法
一、问题描述: 利用带头结点的链表结构,开发一个一元稀疏多项式加法运算器。建立一元多项式并按照指数升序排列输出多项式,将一元多项式输入并存储在内存中,能够完成两个多项式的加减运算并输出结果
二、程序 #include<stdio.h> #include<stdlib.h> #define LEN sizeof(struct PolyNode) typedef struct PolyNode// { float coef;// int expn;// struct PolyNode *next;// }PolyNode,*polynomial;// int n;// polynomial CreatPolyn()// { polynomial head,p,q;// p=q=(polynomial)malloc(LEN);// scanf("%f,%d",&p->coef,&p->expn);// head=NULL;// while(p->coef!=0) { n=n+1; if(n==1) { head=p; }else { q->next=p; q=p; p=(polynomial)malloc(LEN); scanf("%f,%d",&p->coef,&p->expn);// } } q->next=NULL; return(head); } void TopPolyn(polynomial L) { polynomial a,b; float temp_co; int temp_ex; a=L; for(a;a!=NULL;a=a->next){ b=L; for(b;b->next!=NULL;b=b->next){ if(b->expn>b->next->expn){ temp_co=b->coef; temp_ex=b->expn; b->coef=b->next->coef; b->expn=b->next->expn; b->next->coef=temp_co; b->next->expn=temp_ex; } } } return; } void PrintPolyn(polynomial head){ polynomial p; printf("该多项式按升序输出为:"); p=head; if(head!=NULL) do { printf("%.2fx^%d ",p->coef,p->expn); p=p->next; }while(p!=NULL); } polynomial AddPolyn(polynomial P,polynomial Q,polynomial R){ // polynomial P,Q; P=CreatPolyn(); Q=P->next; while(Q!=NULL){ if(P->expn==P->next->expn){ P->coef=P->next->coef+P->coef; P->next=P->next->next; free(Q); }else { P=P->next; Q=Q->next; } R=P; } return (R); } void main(){ polynomial A,B,Ans; printf("请输入多项式A的系数和指数,输入格式为“coefficient,expn”,中间以逗号隔开\n"); A=CreatPolyn(); // printf("多项式A按升序输出为:"); TopPolyn(A); PrintPolyn(A); printf("\n\n请输入多项式B的系数和指数,输入格式为“coefficient,expn”,中间以逗号隔开\n"); B=CreatPolyn(); // printf("多项式B按升序输出为:"); TopPolyn(B); PrintPolyn(B); printf("\n两个多项式相加得出的结果为:"); //Ans=NULL; AddPolyn(A,B,Ans); TopPolyn(Ans); PrintPolyn(Ans); }
三、测试 多项式:1:(2x+5x^8-3x^11)+(7-5x^8+11x^9) 多项式2:(3x+4x^2-2x^9)+(-6x+5x^2+7x^15)