#include
#include
#define ERROR 0
#define OK 1
typedef struct pNode
{ int coef;
int exp;
struct pNode* link;
}PNode;
typedef struct polynominal
{
PNode *head;
}Polynominal;
void Create(Polynominal *p)
{
PNode *pn,q,pre;
p->head=(PNode)malloc(sizeof(PNode));
p->head->exp=-1;
p->head->link=p->head;
for(;;)
{
pn=(PNode)malloc(sizeof(PNode));
printf("coef:\n");
scanf("%d",&pn->coef);
printf("exp:\n");
scanf("%d",&pn->exp);
if(pn->exp<0)
break;
pre=p->head;
q=p->head->link;
while(q&&q->exp>pn->exp)
{
pre=q;
q=q->link;
}
pn->link=q;
pre->link=pn;
}
}
void Add(Polynominal *px,Polynominal *qx)
{
PNode *q,*q1=qx->head,*p,temp;
p=px->head->link;
q=q1->link;
while(p->exp>=0)
{
while(p->expexp)
{
q1=q;
q=q->link;
}
if(p->exp==q->exp)
{
q->coef=q->coef+p->coef;
if(q->coef==0)
{
q1->link=q->link;
free(q);
q=q1->link;
p=p->link;
}
else
{
q1=q;
q=q->link;
p=p->link;
}
}
else
{
temp=(PNode)malloc(sizeof(PNode));
temp->coef=p->coef;
temp->exp=p->exp;
temp->link=q1->link;
q1->link=temp;
q1=q1->link;
p=p->link;
}
}
}
int Output(Polynominal *p)
{
PNode *q;
int flag=1;
if(!p->head->link)
return ERROR;
q=p->head->link;
while(q!=p->head)
{
if(!flag&&q->coef>0)
printf("+");
flag=0;
if(q->coef==0)
continue;
printf("%d",q->coef);
switch(q->exp)
{
case 0:break;
default:printf("x^%d",q->exp);break;
}
q=q->link;
}
return OK;
}
void Destroy(Polynominal *p)
{
PNode *q;
while(p->head)
{
q=p->head->link;
free(p->head);
p->head=q;
}
}
int Multiply(Polynominal *pn,Polynominal *qn)
{
PNode *q,*p,temp1;
Polynominal h1,h2;
h1->head=(PNode)malloc(sizeof(PNode));
h2->head=(PNode)malloc(sizeof(PNode));
h1->head=NULL;
h2->head=NULL;
if(!pn->head->link||!qn->head->link)
return ERROR;
q=qn->head->link;
p=pn->head->link;
temp1=h1->head->link;
while(q!=qn->head)
{
while(p!=pn->head)
{ temp1->coef=q->coefp->coef;
temp1->exp=q->exp+p->exp;
temp1=temp1->link;
p=p->link;
}
Add(h1,h2);
q=q->link;
}
Output(h2);
printf("\n");
return OK;
}
int main()
{
Polynominal pn,qn;
Create(&pn);
Output(&pn);
printf("\n");
Create(&qn);
Output(&qn);
printf("\n");
Multiply(&pn,&qn);
Add(&pn,&qn);
Output(&qn);
Destroy(&pn);
Destroy(&qn);
return 0;
}