这里主要介绍一下利用链表来进行多项式的加法计算:
#include <iostream>
using namespace std;
class Node
{
private:
int coef;//系数
int index;//指数
Node *next;
public:
Node(int c, int i) {index = i, coef = c, next = NULL;}
Node(int c, int i, Node *n) {index = i, coef = c, next = n;}
Node *insert(int c, int i)
{
next = new Node(c, i, next);
return next;
}
friend class Poly;
};
class Poly
{
private:
Node *head;
public:
Poly() {head = new Node(0, 0);}
~Poly() {}
void addNode();
void output();
void addPoly(Poly q);
};
int main()
{
Poly p, q;
p.addNode();
q.addNode();
p.output();
q.output();
p.addPoly(q);
p.output();
return 0;
}
void Poly::addNode()
{
int i, c;
Node *p = head;
while(true)
{
cin >> c >> i;
if((0 == c) && (-1 == i)) break;
p = p->insert(c, i);
}
p = p->insert(0, 0);
}
void Poly::output()
{
Node *p = head->next;
int first = 0;
while(p)
{
if(first)
{
if(p->coef > 0) cout << "+";
}
else
{
if(0 == p->coef) cout << "0";
first = 1;
}
if(0 != p->coef)
{
if(0 != p->index)
{
if(1 == p->index)
{
if(1 == p->coef)
cout << "X";
else
{
if(-1 == p->coef)
cout << "-X";
else
cout << p->coef << "X";
}
}
else
{
if(1 == p->coef)
{
cout << "X^" << p->index;
}
else
{
if(-1 == p->coef)
cout << "-X^" << p->index;
else
cout << p->coef << "X^" << p->index;
}
}
}
else
{
cout << p->coef;
}
}
p = p->next;
}
cout << endl;
}
void Poly::addPoly(Poly q)
{
Node *p = head, *p1 = p->next, *q1 = q.head->next;
while(p && q1)
{
while(p1 && (q1->index < p1->index))
{
p = p1;
p1 = p->next;
}
if(q1->index > p1->index)
{
p->insert(q1->coef, q1->index);
p1 = p->next;
}
else if(q1->index == p1->index)
{
p1->coef += q1->coef;
}
q1 = q1->next;
}
}