Using a linked list to achieve a sum of one yuan polynomial, and later may continue to expand functions.
#include <iostream>
using namespace std;
struct PolyNode
{
float coef;
int exp;
struct PolyNode* next;
};
class LinkList
{
public:
LinkList();
LinkList(float a[],int b[],int n);
~LinkList();
int ListLength();
void Get(int pos);
int Locate(int item);
void PrintLinkList();
void Insert(int pos,int item);
void Delete(int i);
PolyNode* GetHead();
private:
PolyNode *head;
PolyNode *rear;
PolyNode *next;
PolyNode *p;
PolyNode *q;
PolyNode *s;
};
LinkList::LinkList()
{
head = new PolyNode;
head->next = NULL;
}
LinkList::~LinkList()
{
p = head->next;
while(p)
{
q = p;
p = p->next;
delete q;
}
head = NULL;
}
PolyNode* LinkList::GetHead()
{
return head;
}
LinkList::LinkList(float a[],int b[],int n)
{
head = new PolyNode;
p = head;
for(int i=0;i<n;++i)
{
s = new PolyNode;
s->coef = a[i];
s->exp = b[i];
p->next = s;
p = s;
}
p->next = NULL;
}
void LinkList::PrintLinkList()
{
p = head->next;
while(p)
{
cout<<p->coef<<"x^"<<p->exp;
if(p->next)
if(p->next->coef>=0)
cout<<"+";
p = p->next;
}
cout<<endl;
}
void Add(LinkList &A,LinkList &B)
{
PolyNode *s = new PolyNode;
PolyNode *k = new PolyNode;
PolyNode *j = new PolyNode;
j->next = k;
PolyNode *pa =new PolyNode;
PolyNode *pb = new PolyNode;
pa = A.GetHead()->next;
pb = B.GetHead()->next;
while(pa&&pb)
{
if(pa->exp<pb->exp)
{
s = new PolyNode;
s->coef = pa->coef;
s->exp =pa->exp;
k->next = s;
k = k->next;
pa = pa->next;
}
else if(pa->exp==pb->exp)
{
pa->coef = pa->coef+pb->coef;
if(pa->coef==0)
{}
else
{
s = new PolyNode;
s->coef = pa->coef;
s->exp =pa->exp;
k->next = s;
k = k->next;
}
pa = pa->next;
pb = pb->next;
}
else
{
s = new PolyNode;
s->coef = pb->coef;
s->exp =pb->exp;
k->next = s;
k = k->next;
pb = pb->next;
}
}
while(pb)
{
k->next = pb;
k = k->next;
pb = pb->next;
}
while(pa)
{
k->next = pa;
k = k->next;
pa = pa->next;
}
//print
PolyNode *p = new PolyNode;
p = j->next->next;
while(p)
{
cout<<p->coef<<"x^"<<p->exp;
if(p->next)
if(p->next->coef>=0)
cout<<"+";
p = p->next;
}
cout<<endl;
}
int main()
{
int m,n;
float s;
int k;
float *a,*c;
int *b,*d;
cout<<"The first polynomial term:";
cin>>m;
a = new float[m];
b = new int [m];
for(int i = 0;i<m;++i)
{
cout<<"The"<<i+1<<"coefficient:";
cin>>s;
a[i] = s;
cout<<"The"<<i+1<<"index:";
cin>>k;
b[i] = k;
}
cout<<"The second polynomial term:";
cin>>n;
c = new float[n];
d = new int [n];
for(int i = 0;i<n;++i)
{
cout<<"The"<<i+1<<"coefficient:";
cin>>s;
c[i] = s;
cout<<"The"<<i+1<<"index:";
cin>>k;
d[i] = k;
}
LinkList A(a,b,m),B(c,d,n);
cout<<"---Print A---"<<endl;
A.PrintLinkList();
cout<<"---Print B---"<<endl;
B.PrintLinkList();
cout<<"---Print A+B---"<<endl;
Add(A,B);
cout<<"--------";
return 0;
}