#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
typedef struct PNode{
int coef;
int expn;
struct PNode *next;
}PNode,*Polynomial;
Polynomial InitList(Polynomial &L)
{
L=(Polynomial)malloc(sizeof(PNode));
L->next=NULL;
return L;
}
//尾插法建立单链表
Polynomial CreatList_R(Polynomial &L,int n)
{
Polynomial r,p;
L=(Polynomial)malloc(sizeof(PNode));
L->next=NULL;
r=L;
for(int i=0;i<n;i++)
{
p=(Polynomial)malloc(sizeof(PNode));
scanf("%d",&p->coef);
scanf("%d",&p->expn);
p->next=NULL;
r->next=p;
r=p;
}
return L;
}
//删除单链表中的元素
Polynomial ListDelete(Polynomial &L,int i)
{
int e;
PNode *p,*q;
p=L;
int j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!(p->next)||j>i)return ERROR;
q=p->next;
p->next=q->next;
free(p);
return L;
}
//向单链表中插入一个元素
Polynomial InsertList(Polynomial &L,int i,int e,int f)
{
PNode *s,*p;
p=L;
int j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)return ERROR;
s=(Polynomial)malloc(sizeof(PNode));
s->coef=e;
s->expn=f;
s->next=p->next;
p->next=s;
return L;
}
//输出函数
Polynomial PrintList(Polynomial &L)
{
Polynomial p;
p=L->next;
while(p)
{
printf("+(%dx^%d)",p->coef,p->expn);
p=p->next;
}
printf("\n");
return 0;
}
int main()
{
Polynomial A,B,C;
PNode *Lc,*Lb,*r;
//int c;
int a,b;
A=InitList(A);
B=InitList(B);
C=InitList(C);
printf("请创建多项式A:\n");
printf("请输入多项式A的项数:\n");
scanf("%d",&a);
CreatList_R(A,a);
printf("A=");
PrintList(A);
C=A;
printf("请创建多项式B:\n");
printf("请输入多项式B的项数:\n");
scanf("%d",&b);
CreatList_R(B,b);
printf("B=");
PrintList(B);
Lc=A->next;
Lb=B->next;
//Ld=B->next;
int c=0;
while(Lc&&Lb)
{
if(Lc->expn==Lb->expn)
{
c=Lc->coef+Lb->coef;
if(c!=0)
{
Lc->coef=c;
C->next=Lc;
C=Lc;
Lc=Lc->next;
r=Lb;
Lb=Lb->next;
free(r);
}
else
{
r=Lc;
Lc=Lc->next;
free(r);
r=Lb;
Lb=Lb->next;
free(r);
}
}
else if(Lc->expn<Lb->expn)
{
C->next=Lc;
C=Lc;
Lc=Lc->next;
}
else
{
C->next=Lb;
C=Lb;
Lb=Lb->next;
}
}
C->next=Lc?Lc:Lb;
free(B);
printf("输出运算结果:\n");
printf("C=");
PrintList(A);
return 0;
}
运行结果: