#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct LNode
{
int data,expn;
struct LNode *next;
}Node;
Node *Create_List(int m)
{
Node *head,*tail,*pnew;
int d,e;
head=(Node *)malloc(sizeof(Node));
if(head==NULL)
{
cout<<"no enough memory!"<<endl;
system("pause");
return NULL;
}
head->next=NULL;
tail=head;
for(int i=0;i<m;i++)
{
cin>>d>>e;
pnew=(Node *)malloc(sizeof(Node));
if(pnew==NULL)
{
cout<<"no enough memory!"<<endl;
system("pause");
return NULL;
}
pnew->data=d;
pnew->expn=e;
pnew->next=NULL;
tail->next=pnew;
tail=pnew;
}
return head;
}
void Display_List(Node *head)
{
Node *p;
for(p=head->next;p->next!=NULL;p=p->next)
{
if(p->expn==0)
cout<<p->data<<'+';
else if(p->data==1&&p->expn==1)
cout<<"x+";
else if(p->data==1)
cout<<"x^"<<p->expn<<'+';
else if(p->expn==1)
cout<<p->data<<"x+";
else
cout<<p->data<<"x^"<<p->expn<<'+';
}
if(p->expn==0)
cout<<p->data;
else if(p->data==1&&p->expn==1)
cout<<"x";
else if(p->data==1)
cout<<"x^"<<p->expn;
else if(p->expn==1)
cout<<p->data<<'x';
else
cout<<p->data<<"x^"<<p->expn;
cout<<endl;
}
void Addpolyn(Node *ha,Node *hb,Node *&hc)
{
Node *pa,*pb,*s,*tc;
pa=ha->next;
pb=hb->next;
int c;
hc=(Node *)malloc(sizeof(Node));
tc=hc;
while(pa!=NULL&&pb!=NULL)
{
if(pa->expn>pb->expn)
{
s=(Node *)malloc(sizeof(Node));
s->expn=pa->expn;
s->data=pa->data;
tc->next=s;
tc=s;
pa=pa->next;
}
else if (pa->expn<pb->expn)
{
s=(Node *)malloc(sizeof(Node));
s->expn=pb->expn;
s->data=pb->data;
tc->next=s;
tc=s;
pb=pb->next;
}
else
{
c=pa->data+pb->data;
if (c!=0)
{
s=(Node *)malloc(sizeof(Node));
s->expn=pa->expn;
s->data=c;
tc->next=s;
tc=s;
}
pa=pa->next;
pb=pb->next;
}
}
if (pb!=NULL)
pa=pb;
while(pa!=NULL)
{
s=(Node *)malloc(sizeof(Node));
s->expn=pa->expn;
s->data=pa->data;
tc->next=s;
tc=s;
pa=pa->next;
}
tc->next=NULL;
}
int main()
{
Node *P1,*P2,*P3;
cout<<"input the data and expn of P1:"<<endl;
P1=Create_List(5);
cout<<"P1: ";
Display_List(P1);
cout<<"input the data and expn of P2:"<<endl;
P2=Create_List(6);
cout<<"P2: ";
Display_List(P2);
Addpolyn(P1,P2,P3);
cout<<"the P3 if the add of P1 and P2:"<<endl;
cout<<"P3: ";
Display_List(P3);
return 0;
}
/*5 5 3 4 2 2 1 1 6 0
6 6 -3 5 -3 4 1 2 2 1 1 0*/
多项式加法,链表方法实现
最新推荐文章于 2023-03-11 12:00:00 发布