一元多项式加法运算
设计函数分别求两个一元多项式的和。
输入格式:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0
。
TIPS:1.关于链表,在最后一定要记得释放空表头结点;
2.每进行一次运算都别忘了Attach;
3.操作链表的标准步骤,定义P,rear,temp;然后申请内存,让P->next=NULL,rear=P;最后通过temp释放空表头结点。
代码:
#include<stdio.h>
typedef struct Polynode *Polynomial;
struct Polynode{
int c;
int e;
Polynomial next;
};
Polynomial readPoly()
{
Polynomial P,rear,temp;
int c,e,N;
scanf("%d",&N);
P=(Polynomial)malloc(sizeof(struct Polynode));
P->next=NULL;
rear=P;
while(N--){
scanf("%d %d",&c,&e);
Attach(c,e,&rear);
}
temp=P;
P=P->next;
free(temp);//在最后释放空表头节点
return P;
}
/*int compare(int a,int b)
{
if(a>b)return 1;
if(a==b)return 0;
return -1;
}*/
Polynomial Add(Polynomial P1,Polynomial P2)
{
Polynomial front,rear,temp;
int sum;
rear=(Polynomial)malloc(sizeof(struct Polynode));
front=rear;
while(P1&&P2)
if(P1->e>P2->e){
Attach(P1->c,P1->e,&rear);
P1=P1->next;
}
else if(P1->e<P2->e){
Attach(P2->c,P2->e,&rear);
P2=P2->next;
}
else{
sum = P1->c+P1->c;
if(sum) Attach(sum,P1->e,&rear);
P1=P1->next;
P2=P2->next;
}
for(;P1;P1=P1->next)
Attach(P1->c,P1->e,&rear);
for(;P2;P2=P2->next)
Attach(P2->c,P2->e,&rear);
rear->next=NULL;
temp=front;
front=front->next;//释放空表头节点
free(temp);
return front;
}
/*Polynomial Add(Polynomial P1,Polynomial P2)
{
Polynomial front,rear,temp;
int sum;
rear=(Polynomial)malloc(sizeof(struct Polynode));
front=rear;
while(P1&&P2)
switch(compare(P1->e,P2->e)){
case 1:
Attach(P1->c,P1->e,&rear);
P1=P1->next;
break;
case -1:
Attach(P2->c,P2->e,&rear);
P2=P2->next;
break;
case 0:
sum = P1->c+P1->c;
if(sum) Attach(sum,P1->e,&rear);
P1=P1->next;
P2=P2->next;
break;
}
for(;P1;P1=P1->next)
Attach(P1->c,P1->e,&rear);
for(;P2;P2=P2->next)
Attach(P2->c,P2->e,&rear);
rear->next=NULL;
temp=front;
front=front->next;//释放空表头节点
free(temp);
return front;
}
*/
int Print(Polynomial p)
{
int flag=0;
if(!(p->next)){
printf("0 0\n");
return 0;
}
while(p){
if(!flag){
flag+=1;
}else{
printf(" ");
}
printf("%d %d",p->c,p->e);
p=p->next;
}
printf("\n");
return 0;
}
void Attach(int c,int e,Polynomial *prear)
{
Polynomial P;
P=(Polynomial)malloc(sizeof(struct Polynode));
P->c=c;
P->e=e;
P->next=NULL;
(*prear)->next=P;
*prear=P;
}
int main()
{
Polynomial P1,P2,PP,PS;
P1=readPoly();
P2=readPoly();
// PP=Mult(P1,P2);
PS=Add(P1,P2);
Print(PS);
//Print(PP);
return 0;
}