#include<iostream>
#include<cmath>
using namespace std;
typedef struct node
{
int ratio;//系数
int index;//指数
struct node *next;
}lnode;
void foundlnode(lnode *l)//创建链表
{
int n,i=0;
lnode *p1=l,*p2;
cout<<"输入多项式项数:\n";
cin>>n;
cout<<"输入多项式系数和指数:\n";
while(p1)
{
if(i==n)
break;
p2=(lnode *)new lnode;//开辟节点
while(!p2)
{
p2=(lnode *)new lnode; //开辟失败,直到开辟成功为止
}
cin>>p2->ratio>>p2->index;//输入元素数据
p1->next=p2;
p1=p1->next;
i+=1;
}
p2->next=NULL;//最后一个节点指针域为空
}
/*求多项式和*/
int sum(lnode *l,int x)
{
int i=0,sum=0;
lnode *p1=l->next;
while(p1)
{
sum+=p1->ratio*pow(x,p1->index);
p1=p1->next;
}
return sum;
}
/*输出链表*/
void output(lnode *l,int x)
{
lnode *p1=l->next;
while(p1)
{
cout<<p1->ratio<<"*"<<x<<"^"<<p1->index;
if(p1->next)
cout<<"+";
p1=p1->next;
}
cout<<endl;
}
/*释放链表*/
void freelb(lnode *l)
{
lnode *p1=l->next,*p2;
while(p1)
{
p2=p1->next;
delete p1;
p1=p2;
}
delete p1;
delete p2;
}
int main()
{
lnode *head;
int x,nsum; //多项式项数
/*构造链表*/
head=(lnode*)new lnode;//创建头节点
while(!head)
{
head=(lnode*)new lnode; //开辟失败重新失败
}
/*输入多项式元素*/
foundlnode(head);
cout<<"输入多项式底数:";
cin>>x;
/*输出多项式*/
output(head,x);
cout<<"多项式和为:"<<endl;
/*多项式求和*/
nsum=sum(head,x);
cout<<nsum<<endl;
freelb(head);
delete head;
return 0;
}
转载于:https://my.oschina.net/u/3026393/blog/795783