#include<iostream>
using namespace std;
struct node //创建结构体,包含系数,指数,指针
{
int n;
float c;
node *next;
};
node *create(char M ) //创建链表,存放多项式
{
int n=0;
float c=0;
node *head=NULL,*p1=NULL,*p2=NULL;
cout<<"请按指数升序输入多项式"<< M <<"的系数,以回车结束:";
do
{
cin>>c;
if(c) //存放系数不为零的项
{
p1=new node;
p1->c=c;
p1->n=n;
if (head==NULL) head=p1;
else p2->next=p1;
p2=p1;
p1->next=NULL;
}
n++;
}while(cin.get()!='\n');
return head; //返回头指针
}
node *fun(node *A ,node *B) //多项式求和
{
int n;
node *p=NULL,*q=NULL,*head; //用于标记A的上一个节点
head=A ; //标记头节点
while(A!=NULL&&B!=NULL) //逐项比较直到一个多项式结束
{
if(A->n - B->n==0)
{
A->c=A->c+B->c ; //同幂指数相加
if(A->c) p = A ; //若和非零,保留A地址
else //否则删去此项
{
if(p!=NULL) {p->next = A->next ; A = A->next;}
else {head=A->next;}
}
A = A->next; //AB向后一项移动
B = B->next ;
}
else if(A->n - B->n<0)
{
p = A ; A = A->next; //保留A地址,A向下一项
}
else
{
if(p == NULL)
{
q=B->next ; //保存B->next
B->next= A ; //将B插至A前
head = B; //头节点变为B
p=A ;B =q; //保留A地址,B向下一项
}
else
{
p->next = B ; //将B插至A前
B->next = A ;
B = B->next ; //B向下一项
}
}
}
if(A==NULL) p->next = B; //A结束,将B剩余项复制至A尾
return head;
}
void print(node *head) //输出函数
{
node *p;
p=head;
for(;head!=NULL;head=head->next)
{
if(head==p) cout<<head->c;
else if(head!=p)
{
if(head->c>0&&head->c!=1) cout<<"+"<<head->c;
if(head->c==1) cout<<"+";
if(head->c<0&&head->c!=-1) cout<<head->c;
if(head->c==-1) cout<<"-";
}
if(head->n!=0) cout<<"x";
if(head->n!=1&&head->n!=0) cout<<"^"<<head->n;
}
}
int main()
{
char A='A' ,B='B';
node *head1,*head2,*result;
head1=create(A);
head2=create(B);
result=fun(head1,head2);
cout<<"求和结果为:"<<endl;
print(result);
return 0;
}
【C++】多项式求和,链表实现
猜你喜欢
转载自blog.csdn.net/a1183976042/article/details/83045457
今日推荐
周排行