数据结构——一元多项式问题(C语言)


数据结构——一元多项式问题(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->coef
1){
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;

}`

猜你喜欢

转载自blog.csdn.net/qq_41596568/article/details/83046965
今日推荐