
利用代码实现

这里主要使用了链表,通过3个函数来进行操作。分别是Inpu函数,Add运算函数,打印函数。
/*采用链表的方式*/#include<stdio.h>#include<stdlib.h>#include<limits.h>typedef struct polyn //定义多项式的结构{float coef; //系数项int expn; //指数struct polyn *next; //指向下一项}POLYN,*pPOLYN;void PolynInput(pPOLYN *p) //输入一元多项式{int i,min=INT_MIN; //INT_MIN是int型的最小数pPOLYN p1,p2; //分别表示2个多项式的指针if(!(*p=(POLYN *)malloc(sizeof(POLYN)))) //为头结点分配内存{printf("内存分配失败 \n");exit(0);}(*p)->coef=0; //设置头结点的系数为0printf("输入该多项式的项数:");scanf("%d",&((*p)->expn));(*p)->next=NULL;for(i=0;i<(*p)->expn;i++) //输入多项式各项{if(!(p1=(pPOLYN)malloc(sizeof(POLYN)))) //分配一个多项式的内存{printf("内存分配失败: \n");exit(0);}printf("第%d项系数:",i+1);scanf("%f",&(p1->coef));do{printf("第%d项指数:",i+1);scanf("%d",&(p1->expn));if(p1->expn<min)printf("\n前项=指数值不能小于前一项指数值%d!\n重新输入\n",(*p)->next->expn);}while(p1->expn<min);min=p1->expn;p1->next=(*p)->next;(*p)->next=p1;}p1=(*p)->next; //合并多项式中指数值相同的项while(p1){p2=p1->next; //取下一节点while(p2 && p2->expn==p1->expn) //若节点有效,节点与q节点的指数相同{p1->coef+=p2->coef; //累加系数p1->next=p2->next; //删除r指向的节点free(p2);p2=p1->next;(*p)->expn--;}p1=p1->next;}}void PolynPrint(pPOLYN p) //输出多项式{pPOLYN p1;int i;printf("\n\n计算后的多项式共有%d项 \n",p->expn);p1=p->next;i=1;while(p1){printf("第%d项,系数:%g,指数:%d\n",i++,p1->coef,p1->expn);p1=p1->next;}printf("\n");}void PolynAdd(pPOLYN pa,pPOLYN pb) //多项式相加pa=pa+pb{pPOLYN pa1,pb1,pc1,p;pa1=pa->next; //指向被加链表的第一个有效项pb1=pb->next; //指向加链表的第一个有效项pc1=pa; //指向被加链表pc1->next=NULL;pa->expn=0; //清空多项式项目数据while(pa1 && pb1) //两个多项式都未结束{if(pa1->expn > pb1->expn) //如果pa1指数大于pb1{pc1->next=pa1; //将pa1指数加入结果链表中pc1=pa1;pa1=pa1->next; //处理pa1中的下一项pc1->next=NULL;}else if(pa1->expn < pb1->expn) //pa1的指数小于pb1的指数{pc1->next=pb1; //将pb1指数加入结果链表中pc1=pb1;pb1=pb1->next; //处理pb1的下一项pc1->next=NULL;}else { //pa1指数等于pb1指数,进行系统相加pa1->coef+=pb1->coef; //累加素数if(pa1->coef!=0) //若系数不为0{pc1->next=pa1; //将相加结果添加到结果链表中pc1=pa1;pa1=pa1->next; //处理pa1的下一项pc1->next=NULL;p=pb1;pb1=pb1->next; //处理pb1的下一项free(p);}else{ //系数为0,则不记录该项p=pa1; //用p指向pa1中的该项pa1=pa1->next; //链表中删除该项free(p); //释放该项所占用内存p=pb1; //用临时指针指向pb1中的该项pb1=pa1->next; //链表中删除该项free(p); //释放该项所占用内存pa->expn--; //后面要进行累加操作,此处先减}}pa-pa->expn++; //累加一个结果项}if(pa1) //若pa1中还有项{pc1->next=pa1; //将pa1中的项添加到结果链表中while(pa1){pa->expn++;pa1=pa1->next;}}if(pb1) //若pb1中还有项{pc1->next=pb1; //将pb1中的项添加到结果链表中while(pb1){pa->expn++;pb1=pb1->next;}}free(pb); //释放pb头链所占的内存空间}int main(){pPOLYN pa=NULL,pb=NULL; //指向多项式链表的指针printf("输入第一个多项式数据:\n");PolynInput(&pa); //调用函数输入一个多项式printf("\n输入第二个多项式数据:\n");PolynInput(&pb); //调用函数,输入另一个多项式PolynAdd(pa,pb); //调用多项式相加函数printf("\n两个多项式之和为:");PolynPrint(pa); //输出运算得到的多项式getch();return 0;}
原文:http://www.cnblogs.com/aqyl/p/6863514.html