多项式相加实现代码
void addList(LinkList a,LinkList b)
{Node *p,*q,*r,*t;
p=a->next;
q=b->next;
r=a;
while(p!=NULL&&q!=NULL)
{
if(p->exp<q->exp)
{ r->next=p;
r=p;
p=p->next;
}
else if(p->exp>q->exp)
{ r->next=q;
r=q;
q=q->next;
}
else
{ if((p->coef+q->coef)==0)
{
t=p;
p=p->next;
free(t);
t=q;
q=q->next;
free(t);
}
else
{p->coef=p->coef+q->coef;
r->next=p;
r=p;
p=p->next;
t=q;
q=q->next;
free(t);
}
}
}
if(p==NULL) { r->next=q;}
if(q==NULL) { r->next=p;}
}
完整代码
#include<stdlib.h>
#include <stdio.h>
typedef struct Node
{ int coef;
int exp;
struct Node *next;
}Node,*LinkList;
LinkList creatList()
{ LinkList L;
Node *p,*r;
int c,e;
L=(LinkList)malloc(sizeof(Node));
r=L;
scanf("%d,%d",&c,&e);
while(c!=0)
{
p=(Node*)malloc(sizeof(Node));
p->coef=c;
p->exp=e;
r->next=p;
r=p;
scanf("%d,%d",&c,&e);
}
r->next=NULL;
return L;
}
void addList(LinkList a,LinkList b)
{Node *p,*q,*r,*t;
p=a->next;
q=b->next;
r=a;
while(p!=NULL&&q!=NULL)
{
if(p->exp<q->exp)
{ r->next=p;
r=p;
p=p->next;
}
else if(p->exp>q->exp)
{ r->next=q;
r=q;
q=q->next;
}
else
{ if((p->coef+q->coef)==0)
{
t=p;
p=p->next;
free(t);
t=q;
q=q->next;
free(t);
}
else
{p->coef=p->coef+q->coef;
r->next=p;
r=p;
p=p->next;
t=q;
q=q->next;
free(t);
}
}
}
if(p==NULL) { r->next=q;}
if(q==NULL) { r->next=p;}
}
void printList(LinkList L)
{ int a,b;
Node *p=L->next;
do
{a=p->coef;
b=p->exp;
if(b==0) {printf("%d",a);}
else
{ if(p->coef<0)
printf("%dx^%d",a,b);
else
{printf("+%dx^%d",a,b);}
}
p=p->next;
}while(p!=NULL);
printf("\n");
}
int main()
{ printf("请依次输入第一个多项式的系数和指数(m,n):\n");
LinkList A=creatList();
printf("打印第一个多项式:\n");
printList(A);
printf("请依次输入第二个多项式的系数和指数(m,n):\n");
LinkList B=creatList();
printf("打印第二个多项式:\n");
printList(B);
addList(A,B);
printf("相加后的多项式:\n");
printList(A);
return 0;
}
运行结果