用数据结构写一个多项式的表达及相加,怎么写啊

问题描述:

用数据结构写一个多项式的表达及相加,怎么写啊
1个回答 分类:综合 2014-10-25

问题解答:

我来补答
#include
#include
typedef struct PNode{
double coef;//系数域
int exp;//指数域
struct PNode *next;//指针域
}PNode,*PLink;
void Init_Polynomial(PLink &P)//初始化建立空多项式
{
P=(PLink)malloc(sizeof(PNode));
P->next=NULL;
if(!P)exit(1);
}
void Print_Polynomial(PLink P,char ch)//升序输出多项式,变量符号用ch传递
{
if(!P||ch'Z'&&ch'z')exit(1);
printf("The Polynomial is:");
PLink p=P->next;
if(!p)printf("0");
for(;p;p=p->next)
{
if(p==P->next)printf("%.2lf",p->coef);
else {
if(p->coef>0)printf("+");
printf("%.2lf",p->coef);
}
if(p->exp>1)printf("%c^%d",ch,p->exp);
if(p->exp==1)printf("%c",ch);
if(p->expexp);
}
printf("\n");
}
void Insert_Polynomial(PLink &P,double coef,int exp)//在原升序多项式基础上加上系数为coef指数为exp的项
{
PLink p,prev;
for(prev=P,p=P->next;p&&p->expnext);
if(!p||p->exp>exp)
{
PLink q=(PLink)malloc(sizeof(PNode));
q->coef=coef;
q->exp=exp;
prev->next=q;
q->next=p;
}
else
{
p->coef+=coef;
if(p->coef==0)
{
PLink q=p;
prev->next=p->next;
free(q);
}
}
}
PLink Add_Polynomial(PLink A,PLink B)
{
PLink sum;
Init_Polynomial(sum);
PLink p=A->next,q=B->next,r=sum,temp;
while(p&&q)
{
if(p->exp!=q->exp)
{
if(p->expexp)
{
temp=(PLink)malloc(sizeof(PNode));
temp->exp=p->exp;
temp->coef=p->coef;
temp->next=NULL;
p=p->next;
}
else
{
temp=(PLink)malloc(sizeof(PNode));
temp->exp=q->exp;
temp->coef=q->coef;
temp->next=NULL;
q=q->next;
}
r->next=temp;
r=temp;
}
else
{
if(p->coef+q->coef==0)
{
p=p->next;
q=q->next;
}
else
{
temp=(PLink)malloc(sizeof(PNode));
temp->exp=q->exp;
temp->coef=p->coef+q->coef;
temp->next=NULL;
q=q->next;
p=p->next;
r->next=temp;
r=temp;
}
}
}
while(p)
{
temp=(PLink)malloc(sizeof(PNode));
temp->exp=p->exp;
temp->coef=p->coef;
temp->next=NULL;
p=p->next;
r->next=temp;
r=temp;
}
while(q)
{
temp=(PLink)malloc(sizeof(PNode));
temp->exp=q->exp;
temp->coef=q->coef;
temp->next=NULL;
q=q->next;
r->next=temp;
r=temp;
}
return sum;
}
PLink Multiply_Polynomial(PLink A,PLink B)
{
PLink C;
Init_Polynomial(C);
PLink p,q;
for(p=A->next;p;p=p->next)
{for(q=B->next;q;q=q->next)Insert_Polynomial(C,p->coef*q->coef,p->exp+q->exp);}
return C;
}
void Delete_Polynomial(PLink &A)
{
PLink temp=A;
while(A)
{
temp=A;
A=A->next;
free(temp);
}
}
PLink Exp_Polynomial(PLink A,unsigned int exp)
{
PLink B,temp,C;
Init_Polynomial(B);
Insert_Polynomial(B,1.0,0);
for(int i=0;i
 
 
展开全文阅读
剩余:2000