数据结构——一元多项式问题(C语言)
***`//一元多项式问题
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedef struct Node
{
float coef; /系数/
int expn; /指数/
struct Node *next;
} Polyn;
Polyn *CreatePoly() /建立多项式/
{
Polyn *head,*rear,*s;
int c,e;
head=(Polyn *)malloc(sizeof(Polyn));
rear=head; /rear始终指向表尾/
scanf("%d,%d",&c,&e);
while(c!=0){
s=(Polyn *)malloc(sizeof(Polyn));
s->coef=c;
s->expn=e;
rear->next=s; /尾插法/
rear=s;
scanf("%d,%d",&c,&e);
}
rear->next=NULL;
return (head);
}
void PrintPolyn(Polyn *P) //打印多项式
{
Polyn *q=P->next;
int flag=1;
if(!q){
printf(“0\n”);
return;
}
while(q){
if(q->coef>0&&flag!=1) putchar(’+’);
if(q->coef!=1&&q->coef!=-1){
printf("%g",q->coef);
if(q->expn1) putchar(‘X’);
else if(q->expn) printf(“X^%d”,q->expn);
}
else{
if(q->coef1){
if(!q->expn) putchar(‘1’);
else if(q->expn1) putchar(‘X’);
else printf(“X^%d”,q->expn);
}
if(q->coef-1){
if(!q->expn) printf("-1");
else if(q->expn==1) printf("-X");
else printf("-X^%d",q->expn);
}
}
q=q->next;
flag++;
}
printf("\n");
}
Polyn *AddPolyn(Polyn *pa,Polyn *pb) //加法
{
Polyn *qa=pa->next;
Polyn *qb=pb->next;
Polyn *qc,*s,*headc;
qc=(Polyn *)malloc(sizeof(Polyn));
qc->next=NULL;
headc=qc;
while(qa!=NULL&&qb!=NULL) /*当a,b表都未结束时*/
{
s=(Polyn *)malloc(sizeof(Polyn));
if(qa->expn<qb->expn){
s->coef=qa->coef;
s->expn=qa->expn;
qa=qa->next;
}
else if(qa->expn==qb->expn){
s->coef=qa->coef+qb->coef;
s->expn=qa->expn;
qa=qa->next;
qb=qb->next;
}
else{
s->coef=qb->coef;
s->expn=qb->expn;
qb=qb->next;
}
if(s->coef!=0){
s->next=qc->next;
qc->next=s;
qc=s;
}
else free(s);
}
while(qa!=NULL) /*当a式多出时,添加到c式表尾*/
{
s=(Polyn *)malloc(sizeof(Polyn));
s->coef=qa->coef;
s->expn=qa->expn;
qa=qa->next;
s->next=qc->next;
qc->next=s;
qc=s;
}
while(qb!=NULL) /*当b式多出时,添加到c式表尾*/
{
s=(Polyn *)malloc(sizeof(Polyn));
s->coef=qb->coef;
s->expn=qb->expn;
qb=qb->next;
s->next=qc->next;
qc->next=s;
qc=s;
}
return (headc);
}
Polyn *SubPolyn(Polyn *pa,Polyn *pb) //减法
{
Polyn *h=pb;
Polyn *p=pb->next;
Polyn pd;
while§{
p->coef=-1;
p=p->next;
}
pd=AddPolyn(pa,pb);
for(p=h->next;p;p=p->next)
p->coef *= -1;
return (pd);
}
double EvaPolyn(Polyn *pa,int x) //赋值
{
double y=0;
Polyn *qa=pa->next;
for(;qa;qa=qa->next)
y+=((qa->coef)*pow(x,qa->expn));
return y;
}
Polyn *DerPolyn(Polyn *pa) //求导
{
Polyn *qa=pa->next;
Polyn *pe,*s,*heade;
pe=(Polyn *)malloc(sizeof(Polyn));
pe->next=NULL;
heade=pe;
while(qa!=NULL){
s=(Polyn *)malloc(sizeof(Polyn));
if(qa->expn==0){
free(s);
qa=qa->next;
continue;
}
s->coef=(qa->coef)*(qa->expn);
s->expn=(qa->expn)-1;
qa=qa->next;
if(s->coef!=0){
s->next=pe->next;
pe->next=s;
pe=s;
}
else free(s);
}
return (heade);
}
int main()
{
return 0;
}`