这是我写的一段程序可以实现多项式的加法、减法、乘法,你可以看一看。
#include<iostream>
using namespace std;
struct node
{
double a;
int n;
node*next;
};
//创建多项式
node * create_polynomial()
{
node *head,*temp,*p,*q;
double a;
int n;
p=q=temp=NULL;
head=new node();//创建头结点
head->a=0;
head->n=0;
head->next=NULL;
cout<<"输出多项式元素的系数与指数,以系数、指数为0、0结束:"<<endl;
cin>>a>>n;
while(a!=0)
{
//创建一个新的节点
temp=new node();
temp->a=a;
temp->n=n;
temp->next=NULL;
if(head->next==NULL)//链表为空直接插在头结点后面 head->next=temp;
else //链表非空
{
p=head;
q=p->next;
while(q&&q->n>=n) //查找合适的插入点
{
p=p->next;
q=q->next;
}
if(q) //找到插入点
{
p->next=temp;
temp->next=q;
}
else //插在链表尾部
p->next=temp;
}
cin>>a>>n;
}
return head;
}
//销毁多项式,释放空间
void destroy_polynomial(node*head)
{
node*p=head->next;
node*q=NULL;
while(p)
{
q=p;
p=p->next;
delete q;
}
delete head;
}
//添加节点
void insert_node(node*head,double a,int n)
{
node*temp,*p,*q;
p=q=temp=NULL;
temp=new node();
temp->a=a;
temp->n=n;
temp->next=NULL;
if(head->next==NULL)//链表为空,直接插在头结点后面
head->next=temp;
else //链表非空
{
p=head;
q=p->next;
while(q&&q->n>=n) //查找合适的插入点
{
p=p->next;
q=q->next;
}
if(q) //找到插入点
{
p->next=temp;
temp->next=q;
}
else //插在链表尾部
p->next=temp;
}
}
//删除节点
void delete_zero(node*head)
{
node*p,*q;
p=head;
q=p->next;
while(q&&q->a!=0)//查找系数为0的节点
{
p=p->next;
q=q->next;
}
if(q)//找到节点
{
p->next=q->next;
delete q;
}
}
//查看指定系数的节点是否在链表中
bool In_Link(node*head,int n)
{
node*p=head->next;
while(p&&p->n!=n)//查找节点
p=p->next;
if(p)//找到节点
return true;
else
return false;
}
//多项式节点相加
void add_node(node*head,double a,int n)
{
node*p=head->next;
while(p->n!=n)
p=p->next;
p->a+=a;
}
//多项式相加
node*add(node*head1,node*head2)
{
node*p;
p=head2->next;
while(p)
{
if(In_Link(head1,p->n))//多项式中有相同指数的节点 add_node(head1,p->a,p->n);
else
insert_node(head1,p->a,p->n);
delete_zero(head1);//删除系数为0的节点
p=p->next;
}
destroy_polynomial(head2);
return head1;
}
//多项式相减
node*minus(node*head1,node*head2)
{
node*p;
p=head2->next;
while(p)
{
if(In_Link(head1,p->n))//多项式中有相同指数的节点
add_node(head1,-(p->a),p->n);
else
insert_node(head1,-(p->a),p->n);
delete_zero(head1);//删除系数为0的节点
p=p->next;
}
destroy_polynomial(head2);
return head1;
}
//多项式乘法
node*multiply(node*head1,node*head2)
{
node*head=NULL;//定义一个结果多项式链表
head=new node();
head->a=0;
head->n;
head->next=NULL;
double a=0;
int n=0;
node*pa,*pb;
pa=head1->next;
while(pa)
{
pb=head2->next;
while(pb)
{
a=(pa->a)*(pb->a);
n=(pa->n)+(pb->n);
if(In_Link(head,n))//结果链表中存在相同系数的节点 add_node(head,a,n);
else
insert_node(head,a,n);
delete_zero(head);//删除系数为0的节点
pb=pb->next;
}
pa=pa->next;
}
return head;
}
//打印多项式
void print_polynomial(node*head)
{
node*p=head->next;
while(p->next)
{
if(p->n==0)
cout<<p->a;
else
cout<<p->a<<"x^"<<p->n;
p=p->next;
if(p->a>0)
cout<<"+";
}
if(p->n==0)
cout<<p->a;
else
cout<<p->a<<"x^"<<p->n;
cout<<endl;
}
int main()
{
node*head1,*head2;
head1=head2=NULL;
head1=create_polynomial();
cout<<"多项式1:"<<endl;
print_polynomial(head1);
head2=create_polynomial();
cout<<"多项式2:"<<endl;
print_polynomial(head2);
head1=minus(head1,head2);
cout<<"多项式相减结果:"<<endl;
print_polynomial(head1);
return 0;
}
温馨提示:答案为网友推荐,仅供参考