从键盘读入一元多项式中每一项的系数和指数,请编写算法实现:
1、建立带表头结点的单链表存放一元多项式(按照指数升序排列);
2、输出一元多项式的所有数据元素(按照指数升序输出每一系数非0项的系数和指数);
3、将单链表存放的一元多项式就地逆置,变成按照指数降序排列;
4、输入自变量的值,计算一元多项式的值(设计高效算法);
5、求2个一元多项式的和多项式;
#include<stdio.h>
#include<iostream>
using namespace std;
#define OVERFLOW -2
#define OK 1
typedef struct Lnode{
int coef;//系数
int exp;//指数
struct Lnode *next;
}Lnode,*LinkList;
LinkList L,LA,LB;
int CreateNode(LinkList &L,int n)
{
int i;
LinkList p,s;
L=(LinkList)malloc(sizeof(Lnode));
if(!L)
exit(OVERFLOW);
p=L;
for(i=1;i<=n;i++)
{
s=(LinkList)malloc(sizeof(Lnode));
if(!s)
exit(OVERFLOW);
cin>>s->coef;
cin>>s->exp;
s->next=NULL;
p->next=s;
p=p->next;
}
return OK;
}
void AddPloyn(LinkList &LA,LinkList &LB)
{
int x;
LinkList pa,pb,pre,u;
pre=pa=LA;
pb=LB;
pa=pa->next;
pb=pb->next;
while(pa&&pb)
{
if(pa->exp<pb->exp)
{
pre=pa;pa=pa->next;
}
else if(pa->exp==pb->exp)
{
x=pa->coef+pb->coef;
if(x==0)
{
pre->next=pa->next;free(pa);pa=pre->next;
u=pb;pb=pb->next;free(u);
}
else
{
pa->coef=x;pre=pa;pa=pa->next;
u=pb;pb=pb->next;free(u);
}
}
else
{
u=pb;pb=pb->next;pre->next=u;pre=u;pre->next=pa;
}
}
if(pa==NULL)
pre->next=pb;
free(LB);
}
int qiuzhi(LinkList L,int x)
{
int m,res=0;
LinkList t;
for(t=L->next;t;t=t->next)
{
m=t->coef;
for(int i=t->exp;i>0;i--)
m*=x;
res+=m;
}
return res;
}
int main()
{
LinkList t;
int na,nb,res,x;
cout<<"LA.lenth"<<endl;
cin>>na;
cout<<"CreateLA"<<endl;
CreateNode(LA,na);
cout<<"LB.lenth"<<endl;
cin>>nb;
cout<<"CreateLB"<<endl;
CreateNode(LB,nb);
cout<<"Add:LA&LB"<<endl;
cout<<"result:"<<endl;
AddPloyn(LA,LB);
for(t=LA->next;t;t=t->next)
{
printf("%d %d ",t->coef,t->exp);printf("\n");
}
cout<<"input x"<<endl;
cin>>x;
res=qiuzhi(LA,x);
cout<<res<<endl;
}